如何强制Netcat立即发送输入内容,而不仅仅是在换行符上?


35

如何强制Netcat立即发送输入内容,而不仅仅是在换行符上?我想手动测试HTTP解析器,并检查标头行分布在多个数据包中时的行为。


2
尝试socat按照此答案中
Jeremy W

Answers:


42

使用“ eof”键, CtrlD。在一行的中间按下时,它将把当时已输入的所有内容提供给netcat。

缓冲实际上是由tty层完成的,根本没有处理ncstty -icanon && nc ...会禁用缓冲功能,并允许nc查看输入到终端中的数据,届时将立即发送该数据。(请注意,sttync命令必须一起运行,否则,shell本身可能会在显示提示符时重新启用它。)


+1,但是有没有办法以不缓冲任何内容的方式打开netcat?
lpapp 2014年

5
@FinalContest:缓冲由tty层完成。stty -icanon && nc ...stty raw && nc ...将其禁用。[请注意,它必须一起运行,否则外壳本身会在显示提示时重新启用它。]
grawity 2014年

@grawity:太棒了,前者工作正常,但后者陷入困境... ctrl-c不再能退出会话,我也无法让ctrl-z继续工作。那是预期的吗?另外,请更新您的答案,以便我们清理评论。
lpapp 2014年

2
@FinalContest:是的,raw更改了一堆tty选项,其中之一是在tty级别处理特殊的“控制”键。(这实际上是一种“原始”模式,因为它将所有内容传递给程序。)您可以stty -a -F /dev/pts/XX从另一个tty 使用它来查看当前参数。
grawity 2014年

我使用的是stty -icanon -echo && nc ...否则,我在nc中键入的每个字符都会被回显两次
Luo Luo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.