linux 如何让tcpdump写入文件并标准输出适当的数据?[关闭]

5f0d552i  于 2023-05-16  发布在  Linux
关注(0)|答案(5)|浏览(247)

**关闭。**这个问题是not about programming or software development。目前不接受答复。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
3天前关闭。
社区在3天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我想让tcpdump将原始数据包数据写入一个文件,并在捕获数据包时将数据包分析显示到标准输出中(我所说的分析是指当-w丢失时正常显示的行)。有人能告诉我怎么做吗?

q1qsirdb

q1qsirdb1#

这里有一个简单的方法来做你想做的事情:

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

它的作用:

  • -w -告诉tcpdump将二进制数据写入stdout
  • -U告诉tcpdump在接收到每个数据包时将其写入标准输出,而不是缓冲它们并以块的形式输出
  • tee将该二进制数据写入文件AND到自己的stdout
  • -r -告诉第二个tcpdump从其stdin获取数据
mbyulnm0

mbyulnm02#

从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.
bvjxkvbb

bvjxkvbb3#

tcpdump > output.txt如果您希望将输出保存为文本格式的文件。

如果存在权限问题,请使用sudo
我的经验,数据得到不断写入。

o2gm4chl

o2gm4chl4#

tcpdump ${ARGS} &
PID=$!
tcpdump ${ARGS} -w ${filename}
kill $PID
mcdcgff0

mcdcgff05#

如果你想要一种不需要运行两次tcpdump的方法,可以考虑:

sudo tcpdump port 80 -w $(tty) | tee /tmp/output.txt

在交互式命令提示符下,您可以使用$TTY代替$(tty),但在脚本中不会设置前者(尽管我不确定在脚本中运行tcpdump有多常见)。
旁注:tcpdump默认情况下让你写文件的方式并不太适合Unix。默认情况下,程序应该写入stdout。 shell 构造已经提供了对文件的重定向。也许有一个很好的理由tcpdump是这样设计的,但我不知道是什么。

相关问题