Linux tcpdump通过管道将grep写入文件。(奇怪的数字16)

Linux tcpdump通过管道将grep写入文件。(奇怪的数字16),linux,redirect,pipe,tcpdump,Linux,Redirect,Pipe,Tcpdump,我有以下命令(出于隐私原因,我将ip更改为8.8.8.8): tcpdump-i eth0-nn udp端口范围27950-27970和dst 8.8.8.8 | grep'length 16$'>testfile 非常直截了当。我希望将所有长度为16的传入数据包写入一个文件,但由于一个非常奇怪的原因,它无法工作 tcpdump-i eth0-nn udp端口范围27950-27970和dst 8.8.8.8 | grep'长度16$' 这个命令运行良好,可以准确地显示我想要的内容,只是不能显示

我有以下命令(出于隐私原因,我将ip更改为8.8.8.8):

tcpdump-i eth0-nn udp端口范围27950-27970和dst 8.8.8.8 | grep'length 16$'>testfile

非常直截了当。我希望将所有长度为16的传入数据包写入一个文件,但由于一个非常奇怪的原因,它无法工作

tcpdump-i eth0-nn udp端口范围27950-27970和dst 8.8.8.8 | grep'长度16$'

这个命令运行良好,可以准确地显示我想要的内容,只是不能显示在文件中。所以我肯定包在那里。当我使用相同的命令但长度为34时,如下所示:

tcpdump-i eth0-nn udp端口范围27950-27970和dst 8.8.8.8 | grep'length 34$'>testfile

这会将它写入文件,而不是我想要的数据包。为什么完全相同的命令适用于34而不适用于16?16岁有什么特别之处?我完全糊涂了,因为这对我来说似乎不可能

最初,我想将命令再次导入sed。但管道也不能与16号管道一起工作。如果我将“>testfile”更改为“|grep 8.8.8.8”,那么我将不会得到任何输出,而使用34则会得到一个输出

你们谁能理解这一切?我是不是偶然发现了一只奇怪的虫子?我已经在谷歌上搜索了好几个小时,但是运气不好


事先非常感谢。

问题是:我确实尝试过使用tcpdump line buffered-l,但没有使用grep--line buffered。这似乎确实奏效了

这是我的第一个问题,直到下一个问题。如何使sed行缓冲。 我可以用unbuffer命令来完成。所以现在我是一个快乐的人。 谢谢@A.B的帮助


编辑:这确实有效。所以不要介意否决票。可能是其中一个愤怒的孩子不应该拥有一台电脑。

来自man tcpdump:“-l使标准输出行缓冲。”Stack Overflow是一个解决编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。谢谢你的回复。我尝试过添加-l,但没有任何运气。我得到了同样的结果。但是,它确实与缓冲区有关,因为我在一夜之间打开了命令,而刚才有一个结果。奇怪的是,如果我在长度16$之后添加一些东西,它只会缓冲。“tcpdump-i eth0-nnl udp端口范围27950-27970和dst 8.8.8.8 | grep'length 16$| grep 8.8”未给出结果,因此对其进行缓冲。但是“tcpdump-i eth0-nn-l udp portrange 27950-27970和dst 8.8.8.8 | grep 8.8 | grep'length 16$”确实给出了一个结果,而它基本上是同一个命令。@jww,它将在bash脚本中使用,因此这是一个非常好的开发问题。在“我可以在这里询问哪些主题”中,它清楚地说明了“程序员常用的软件工具”“我很确定它也属于这一类。