如何在 netcat 中以互動方式鍵入 \r\n 終止的查詢?

如何在 netcat 中以互動方式鍵入 \r\n 終止的查詢?
$ 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 oneliner 並將其通過管道傳輸到 的一次性操作很容易nc,但也許有一些我錯過的簡單方法?

答案1

netcat有一個選項-C或在標準輸入上--crlf替換。\n\r\n

或者,這取決於您使用的終端。我的預設設定可以透過以下方式查看:

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

這顯示了文字下一個輸入的字元是control-V。因此,鍵入control-vcontrol-m會插入一個回車符(而不是換行符,這是當您按returnenter按鍵時得到的結果)。

答案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下透過管道將 stdin轉換為:nc-u\n\r\n

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

您也可以unix2dos使用stdbuf

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

相關內容