Como digito interativamente uma consulta terminada em \r\n no netcat?

Como digito interativamente uma consulta terminada em \r\n no netcat?
$ nc example.com 80
GET / HTTP/1.1
Host: example.com 

HTTP/1.1 200 OK
...

Funciona, o separador de linha está 0Aaqui em vez de require 0D0A.

Como digito uma 0D0Aconsulta separada no netcat?

É fácil fazer algo único printfdigitando manualmente \r\na cada vez ou implementar algum todos-como Perl oneliner e canalizá-lo para nc, mas talvez haja alguma maneira fácil que eu perdi?

Responder1

O meu netcattem uma opção -Cou --crlfpara substituir \npor \r\nstdin.

Alternativamente, depende de qual terminal você está usando. Minhas configurações padrão podem ser vistas por:

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

Isto mostra oliteral-próximocaractere para entrada é control-V. Portanto, digitar control-vseguido de control-minserirá um retorno de carro (em oposição a uma nova linha, que é o que você obtém quando pressiona a tecla returnou enter).

Responder2

Você pode canalizar uma string para nc:

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

Verificar com:

$ 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

Responder3

Você pode canalizar sedpara nco modo sem buffer ( -u) para converter \ndo seu stdin para \r\n:

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

Você também pode usar unix2doscom stdbuf:

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

informação relacionada