我想让tcpdump将原始数据包数据写入文件,并在捕获数据包时在标准输出中显示数据包分析(通过分析我的意思是当缺少-w时它正常显示的行)。 有人可以告诉我该怎么做吗?
答案 0 :(得分:87)
这是一个巧妙的方式来做你想做的事:
tcpdump -w - | tee somefile | tcpdump -r -
它的作用:
-w -
告诉tcpdump
将二进制数据写入stdout
tee
将二进制数据写入文件AND并将其写入自己的stdout
-r -
告诉第二个tcpdump
从stdin
答案 1 :(得分:1)
如果您想要一种无需两次运行tcpdump的方法,请考虑:
sudo tcpdump port 80 -w $(tty) | tee /tmp/output.txt
在交互式命令提示符下,您可以使用$TTY
代替$(tty)
,但是在脚本中不会设置前者(尽管我不确定在一个脚本中运行tcpdump有多普遍)脚本)。
旁注:它不是Unix,而是默认情况下tcpdump使您写入文件的方式。程序默认应写入stdout。 shell结构已经提供了重定向到文件的功能。也许有一个很好的理由可以这样设计tcpdump,但我不知道那是什么。
答案 2 :(得分:1)
从 tcpdump 4.9.3 4.99.0 开始,可以使用 --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.
答案 3 :(得分:-1)
tcpdump ${ARGS} &
PID=$!
tcpdump ${ARGS} -w ${filename}
kill $PID