如何在 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 中输入 -separated 查询?

printf每次手动输入\r\n或实现一些todos类似 Perl 的单行程序并通过管道传输到,做一次性的事情很容易nc,但也许有一些我错过的简单方法?

答案1

netcat有一个选项-C或用标准输入--crlf替换。\n\r\n

或者,这取决于你使用的终端。我的默认设置可以通过以下方式查看:

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

这表明文字下一个输入的字符是control-V。因此,键入control-v后跟control-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通过管道nc( )将标准输入-u转换为:\n\r\n

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

您还可以unix2dos使用stdbuf

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

相关内容