usar tutorial test para ncat how espaƱol ejemplos descargar como bash echo netcat

bash - tutorial - Secuencias de comandos de una solicitud de encabezado HTTP con netcat



ncat-u linux (5)

Esta línea también funcionará como equivalente:

echo -e "HEAD / HTTP/1.1/nHost: 10.1.1.2/nConnection: close/n/n/n/n" | netcat 10.1.1.2 80

Estoy tratando de jugar con Netcat para aprender más sobre cómo funciona HTTP. Me gustaría escribir algo de eso en bash o Perl, pero me he topado con un obstáculo al principio de mi prueba.

Si ejecuto netcat directamente desde el indicador y escribo una solicitud HEAD, funciona y recibo los encabezados para el servidor web que estoy investigando.

Esto funciona:

[romandas@localhost ~]$ nc 10.1.1.2 80 HEAD / HTTP/1.0 HTTP/1.1 200 OK MIME-Version: 1.0 Server: Edited out Content-length: 0 Cache-Control: public Expires: Sat, 01 Jan 2050 18:00:00 GMT [romandas@localhost ~]$

Pero cuando puse la misma información en un archivo de texto y la introduje en netcat a través de una canalización o redirección, en preparación para las secuencias de comandos, no devuelve los encabezados.
El archivo de texto consta de la solicitud HEAD y dos nuevas líneas:

HEAD / HTTP/1.0

Enviar la misma información a través de echo o printf tampoco funciona.

$ printf "HEAD / HTTP/1.0/r/n"; |nc -n 10.1.1.2 80 $ /bin/echo -ne ''HEAD / HTTP/1.0/n/n'' |nc 10.1.1.2 80

¿Alguna idea de lo que estoy haciendo mal? No estoy seguro si es un problema de bash, un problema de eco o un problema de netcat.

Revisé el tráfico a través de Wireshark, y la solicitud exitosa (escrita manualmente) envía la nueva línea final en un segundo paquete, mientras que los métodos de eco, printf y archivo de texto mantienen la nueva línea en el mismo paquete, pero no estoy seguro de qué causa este comportamiento.


Otra forma de hacer que nc espere la respuesta es agregar un sueño a la entrada. p.ej

(printf ''GET / HTTP/1.0/r/n/r/n''; sleep 1) | nc HOST 80


Otra forma es usar lo que se llama la convención ''heredoc''.

$ nc -n -i 1 10.1.1.2 80 <<EOF > HEAD / HTTP/1.0 > > EOF


Puede usar el siguiente comando de netcat para hacer que su instancia sea un servidor web:

MYIP=$(ifconfig eth0|grep ''inet addr''|awk -F: ''{print $2}''| awk ''{print $1}'') while true; do echo -e "HTTP/1.0 200 OK/r/n/r/nWelcome to $MYIP" | sudo nc -l -p 80 ; done&


Necesita dos lotes de "/ r / n", y también para decirle a netcat que espere una respuesta. printf "HEAD / HTTP/1.0/r/n/r/n" |nc -n -i 1 10.1.1.2 80 o similar debería funcionar.