tcpdump 通过 grep 管道写入文件。 (奇怪的数字 16)
tcpdump piped through grep written to file. (Weird number 16)
我有以下命令(出于隐私原因,我将 ip 更改为 8.8.8.8):
tcpdump -i eth0 -nn udp portrange 27950-27970 and dst 8.8.8.8 | grep 'length 16$' > testfile
非常简单。我想将所有长度为 16 的传入数据包写入一个文件,但由于一个非常奇怪的原因,它不起作用。
tcpdump -i eth0 -nn udp portrange 27950-27970 and dst 8.8.8.8 | grep 'length 16$'
此命令运行良好并准确显示我想要的内容,只是不在文件中。所以我肯定数据包在那里。当我使用相同的命令但长度为 34 时:
tcpdump -i eth0 -nn udp portrange 27950-27970 and 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 的帮助。
编辑:这确实有效。所以不要介意否决票。可能是其中一个不应该拥有电脑的愤怒的孩子。
我有以下命令(出于隐私原因,我将 ip 更改为 8.8.8.8):
tcpdump -i eth0 -nn udp portrange 27950-27970 and dst 8.8.8.8 | grep 'length 16$' > testfile
非常简单。我想将所有长度为 16 的传入数据包写入一个文件,但由于一个非常奇怪的原因,它不起作用。
tcpdump -i eth0 -nn udp portrange 27950-27970 and dst 8.8.8.8 | grep 'length 16$'
此命令运行良好并准确显示我想要的内容,只是不在文件中。所以我肯定数据包在那里。当我使用相同的命令但长度为 34 时:
tcpdump -i eth0 -nn udp portrange 27950-27970 and 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 的帮助。
编辑:这确实有效。所以不要介意否决票。可能是其中一个不应该拥有电脑的愤怒的孩子。