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.