Estoy tratando de jugar con netcat para obtener más información sobre cómo funciona HTTP. Me gustaría escribir un guión para Bash o Perl, pero me he topado con un obstáculo al principio de mis pruebas.Creación de scripts de una solicitud de encabezado HTTP con netcat
Si ejecuto netcat directamente desde el indicador y escribo una solicitud HEAD, funciona y recibo los encabezados del servidor web que estoy sondeando.
Esto funciona:
[[email protected] ~]$ 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 [[email protected] ~]$
Pero cuando pongo la misma información en un archivo de texto y lo alimentan a través de una tubería netcat o por medio de redirección, en la preparación de secuencias de comandos, no devuelve las cabeceras.
El archivo de texto consiste en la petición HEAD y dos nuevas líneas:
HEAD/HTTP/1.0
El envío de la misma información a través de eco o printf no funciona bien.
$ 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 de 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 (ingresada 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 estoy no estoy seguro de qué causa este comportamiento.
FYI, el \ r \ n en el printf tiene un propósito; Cambié entre \ ry \ n en varias combinaciones para ver si cambió algo, sin ningún efecto. – romandas