tom*_*823 2 shell grep tcpdump
我正在尝试将 grep 过滤器的输出保存到文件中。
我想运行tcpdump很长时间,并且将某个IP过滤到一个文件中。
tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C."
Run Code Online (Sandbox Code Playgroud)
这很好用。它显示了我网络中的 IP。
但是当我>> file.dump在最后添加时,文件总是空的。
我的脚本:
tcpdump -i eth0 -n -s 0 port 5060 -vvv | grep "A.B.C." >> file.dump
Run Code Online (Sandbox Code Playgroud)
是的,一定是grep。我不想使用 tcpdump 过滤器,因为它给了我数百万行,而使用 grep 我只得到每个 IP 一行。
如何将 grep 命令的完整输出重定向(附加)到文件?
的输出tcpdump可能通过 stderr,而不是 stdout。这意味着grep除非您将其转换为stdout.
为此,您可以使用|&:
tcpdump -i eth0 -n -s 0 port 5060 -vvv |& grep "A.B.C."
Run Code Online (Sandbox Code Playgroud)
然后,输出可能是连续流,因此您必须以某种方式告知grep使用行缓冲。为此,您可以选择--line-buffered。
大家一起说:
tcpdump ... |& grep --line-buffered "A.B.C" >> file.dump
Run Code Online (Sandbox Code Playgroud)