with test open http get netcat

http - test - netcat use



¿Cómo hacer una solicitud HTTP GET manualmente con netcat? (5)

Por lo tanto, tengo que recuperar la temperatura de cualquiera de las ciudades desde http://www.rssweather.com/dir/Asia/India .

Supongamos que quiero recuperar de Kanpur.

¿Cómo hacer una solicitud HTTP GET con Netcat?

Estoy haciendo algo como esto.

nc -v rssweather.com 80 GET http://www.rssweather.com/wx/in/kanpur/wx.php HTTP/1.1

No sé exactamente si estoy en la dirección correcta o no. No puedo encontrar ningún buen tutorial sobre cómo realizar una solicitud de obtención HTTP con netcat, así que lo publico aquí.


En MacOS, necesita la marca -c como sigue:

Little-Net:~ minfrin$ nc -c rssweather.com 80 GET /wx/in/kanpur/wx.php HTTP/1.1 Host: rssweather.com Connection: close [empty line]

La respuesta entonces aparece como sigue:

HTTP/1.1 200 OK Date: Thu, 23 Aug 2018 13:20:49 GMT Server: Apache Connection: close Transfer-Encoding: chunked Content-Type: text/html

El indicador -c se describe como "Enviar CRLF como final de línea".

Para ser compatible con HTTP / 1.1, necesita el encabezado de Host, así como la "Conexión: cerrar" si desea deshabilitar el keepalive.


Esto funciona para mí:

$ nc www.rssweather.com 80 GET /wx/in/kanpur/wx.php HTTP/1.0 Host: www.rssweather.com

Y luego presione doble <enter> , es decir, una vez para el servidor http remoto y una vez para el comando nc .

fuente: pentesterlabs


Ni siquiera necesitas usar / instalar netcat

  • Cree un socket TCP a través de un descriptor de archivo no utilizado, es decir, yo uso 88 aquí
  • Escribe la solicitud en ella
  • usa el fd

    exec 88<>/dev/tcp/rssweather.com/80 echo -e "GET /dir/Asia/India HTTP/1.1/nhost: www.rssweather.com/nConnection: close/n/n" >&88 sed ''s/<[^>]*>/ /g'' <&88


Por supuesto, usted podría profundizar en los estándares buscados en Google, pero en realidad, si desea obtener una sola URL, no merece la pena.

También puede iniciar un netcat en modo de escucha en un puerto:

nc -l 64738

... y luego haga una solicitud de navegador en este puerto con un navegador real. Simplemente escriba en su navegador http://localhost:64738 y vea.

En su caso real, el problema es que HTTP / 1.1 no cierra la conexión automáticamente, pero espera la próxima URL que desea recuperar. La solución es simple:

Utilice HTTP / 1.0:

GET /this/url/you/want/to/get HTTP/1.0 Host: www.rssweather.com <empty line>

o use un encabezado Connection: request para decir el servidor que desea cerrar después de eso:

GET /this/url/you/want/to/get HTTP/1.1 Host: www.rssweather.com Connection: close <empty line>

Extensión: después del encabezado GET, escriba solo la parte de la ruta de la solicitud. El nombre de host del que desea obtener datos pertenece a un encabezado Host: como puede ver en mis ejemplos. Esto se debe a que varios sitios web pueden ejecutarse en el mismo servidor web, por lo que los navegadores deben decirle de qué servidor quieren cargar la página.


python3 http.server localmente con python3 http.server

Esta es también una forma divertida de probarlo. En un shell, inicie un servidor de archivos local:

python3 -m http.server 8000

Luego, en el segundo shell, haga una solicitud:

printf ''GET / HTTP/1.1/r/nHost: localhost/r/n/r/n'' | nc localhost 8000

El encabezado Host: se requiere en HTTP 1.1.

Esto muestra una lista HTML del directorio, tal como se vería en:

firefox http://localhost:8000

A continuación, puede intentar listar archivos y directorios y observar la respuesta:

printf ''GET /my-subdir/ HTTP/1.1/n/n'' | nc localhost 8000 printf ''GET /my-file HTTP/1.1/n/n'' | nc localhost 8000

Cada vez que realiza una solicitud exitosa, el servidor imprime:

127.0.0.1 - - [05/Oct/2018 11:20:55] "GET / HTTP/1.1" 200 -

Confirmando que fue recibido.

example.com

Este dominio mantenido por la IANA es otra buena URL de prueba:

printf ''GET / HTTP/1.1/r/nHost: example.com/r/n/r/n'' | nc example.com 80

y comparar con: http://example.com/

https SSL

nc no parece ser capaz de manejar URLs https . En su lugar, puede utilizar:

sudo apt-get install nmap printf ''GET / HTTP/1.1/r/nHost: github.com/r/n/r/n'' | ncat --ssl github.com 443

Consulte también: https://serverfault.com/questions/102032/connecting-to-https-with-netcat-nc/650189#650189

Si intentas nc , simplemente se cuelga:

printf ''GET / HTTP/1.1/r/nHost: github.com/r/n/r/n'' | nc github.com 443

y tratando de puerto 80 :

printf ''GET / HTTP/1.1/r/nHost: github.com/r/n/r/n'' | nc github.com 443

solo da una respuesta de redireccionamiento a la versión https :

HTTP/1.1 301 Moved Permanently Content-Length: 0 Location: https://github.com/ Connection: keep-alive

Probado en Ubuntu 18.04.