如何让tcpdump写入文件和标准输出相应的数据?

时间:2014-09-01 10:33:21

标签: linux tcpdump

我想让tcpdump将原始数据包数据写入文件,并在捕获数据包时在标准输出中显示数据包分析(通过分析我的意思是当缺少-w时它正常显示的行)。 有人可以告诉我该怎么做吗?

4 个答案:

答案 0 :(得分:87)

这是一个巧妙的方式来做你想做的事:

tcpdump -w - | tee somefile | tcpdump -r -

它的作用:

  • -w -告诉tcpdump将二进制数据写入stdout
  • tee将二进制数据写入文件AND并将其写入自己的stdout
  • -r -告诉第二个tcpdumpstdin
  • 获取数据

答案 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