Scripting una solicitud de encabezado HTTP con netcat
Estoy tratando de jugar con netcat para aprender más sobre cómo funciona HTTP. Me gustaría escribir algunos de ellos en bash o Perl, pero me topé con un obstáculo al principio de mis pruebas.
Si ejecuto netcat directamente desde el indicador y escribo una solicitud HEAD, funciona y recibo los encabezados del servidor web que estoy probando.
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 pongo la misma información en un archivo de texto y lo alimento a netcat a través de una tubería o mediante redirección, en preparación para la secuencia de comandos, no devuelve los encabezados.
El archivo de texto consta de la solicitud HEAD y dos líneas nuevas:
HEAD / HTTP/1.0
Enviar la misma información a través deec 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 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 echo, printf y archivo de texto mantienen la nueva línea en el mismo paquete, pero no estoy seguro de qué causa este comportamiento.