我希望有 tcpdump写原始数据包数据到一个文件,也显示数据包分析到标准输出的数据包被捕获(通过分析,我的意思是它显示正常行时,-w丢失)。 有人能告诉我怎么做吗?
tcpdump
-w
这里有一个简单的方法来做你想做的事情:
tcpdump -w - -U | tee somefile | tcpdump -r -
它的作用:
-w -
stdout
-U
tee
-r -
stdin
tcpdump ${ARGS} & PID=$! tcpdump ${ARGS} -w ${filename} kill $PID
如果您想要一种不需要运行两次 tcpdump 的方法,请考虑:
sudo tcpdump port 80 -w $(tty) | tee /tmp/output.txt
在交互式命令提示符中,您可以使用 $TTY而不是 $(tty),但是在脚本中不会设置 $TTY(尽管我不确定在脚本中运行 tcpdump 有多常见)。
$TTY
$(tty)
旁注: tcpdump 在默认情况下使您写入文件的方式不是很 Unix-y。默认情况下,程序应该写入标准输出。Shell 构造已经提供了对文件的重定向。也许 tcpdump 设计成这样是有原因的,但我不知道那是什么。
由于 tcpdump 4.9.34.99.0,可以使用 --print选项:
--print
tcpdump -w somefile --print
Wednesday, December 30, 2020, by mcr@sandelman.ca, denis and fxl. Summary for 4.99.0 tcpdump release [...] User interface: [...] Add --print, to cause packet printing even with -w.