¿Cómo escribo interactivamente una consulta terminada en \r\n en netcat?

¿Cómo escribo interactivamente una consulta terminada en \r\n en netcat?
$ nc example.com 80
GET / HTTP/1.1
Host: example.com 

HTTP/1.1 200 OK
...

Funciona, el separador de línea está 0Aaquí en lugar de requerido 0D0A.

¿Cómo escribo una 0D0Aconsulta separada en netcat?

Es fácil hacer algo una sola vez printfescribiendo manualmente \r\ncada vez o implementando algo todoscomo Perl oneliner y canalizándolo a nc, pero ¿tal vez hay alguna manera fácil que se me escapa?

Respuesta1

Mi netcattiene una opción -Co --crlfreemplazar \npor \r\nstdin.

Alternativamente, depende del terminal que estés utilizando. Mi configuración predeterminada se puede ver mediante:

$ stty -a
... lnext = ^V; ...

Esto muestra elliteral-siguienteEl carácter de entrada es control-V. Entonces, escribir control-vseguido de control-minsertará un retorno de carro (a diferencia de una nueva línea, que es lo que obtienes cuando presionas la tecla returno enter).

Respuesta2

Puedes canalizar una cadena a nc:

echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80

Comprobar con:

$ echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | hd
00000000  47 45 54 20 2f 20 48 54  54 50 2f 31 2e 31 0d 0a  |GET / HTTP/1.1..|
00000010  48 6f 73 74 3a 20 65 78  61 6d 70 6c 65 2e 63 6f  |Host: example.co|
00000020  6d 0d 0a 0d 0a                                    |m....|
00000025

Respuesta3

Puede canalizar seden ncmodo sin búfer ( -u) para convertir \ndesde su entrada estándar a \r\n:

sed -u 's/$/\r/g' | nc localhost 6379

También puedes usar unix2doscon stdbuf:

stdbuf -i0 -o0 -e0 unix2dos | nc localhost 6379

información relacionada