$ nc example.com 80
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
...
Это работает, разделитель строк 0A
здесь просто вместо требуемого 0D0A
.
Как ввести 0D0A
разделенный -запрос в netcat?
Легко сделать что-то один раз, printf
вручную печатая \r\n
каждый раз, или реализовать что todos
-то вроде однострочника Perl и передать его в nc
, но, может быть, есть какой-то простой способ, который я упускаю?
решение1
У меня netcat
есть опция -C
или --crlf
для замены \n
на \r\n
stdin.
Альтернативно, это зависит от того, какой терминал вы используете. Мои настройки по умолчанию можно увидеть:
$ stty -a
... lnext = ^V; ...
Это показываетбуквально-следующийДля ввода используется символ control-V. Таким образом, ввод control-vс последующим нажатием control-mвставит возврат каретки (в отличие от новой строки, которую вы получаете, нажимая клавишу return
или enter
).
решение2
Вы можете передать строку по конвейеру nc
:
echo -ne 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80
Проверить с:
$ 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
решение3
Вы можете выполнить конвейер sed
в nc
небуферизованном режиме ( -u
), чтобы преобразовать \n
из stdin в \r\n
:
sed -u 's/$/\r/g' | nc localhost 6379
Вы также можете использовать unix2dos
с stdbuf
:
stdbuf -i0 -o0 -e0 unix2dos | nc localhost 6379