如何使用 tcpdump 和滑动窗口或“logrotate”捕获流量?

如何使用 tcpdump 和滑动窗口或“logrotate”捕获流量?

我想用 tcpdump 捕获一些流量以进行故障排除。问题是,错误无法重现。为了不让捕获的数据填满磁盘,我想用某种滑动窗口捕获流量。

假设我将捕获的内容写入文件,当文件大小达到 1GB 时,它将删除最旧的数据包并写入新的数据包。这样,我只能获得几个小时的流量,但希望在用户呼叫时有足够的流量来获得正确的数据包。

我找不到 tcpdump 的选项。有人知道如何解决这个问题吗?

答案1

-c 选项可以帮助您实现这一点:

   -c     Exit after receiving count packets.

因此这将为您提供一个循环的traffic.dmp 文件:

while :
do
 tcpdump -i eth0 -c 50000 -C 1 -w traffic.dmp
done

如果你将它放入 for 循环中,你可以得到一系列文件:

for file in 1 2 3 4 5
do
 tcpdump -i eth0 -c 50000 -C 1 -w traffic${file}.dmp
done

。只要在确定某个数字后调整这些数字,这个数字对于您的磁盘来说不会太大,可以捕获几个小时的数据包。

-C 看起来也很有趣:

   -C     Before writing a raw packet to a  savefile,  check  whether  the
          file  is  currently  larger than file_size and, if so, close the
          current savefile and open a new one.  Savefiles after the  first
          savefile  will  have the name specified with the -w flag, with a
          number after it, starting at 1 and continuing upward.  The units
          of  file_size  are  millions  of  bytes  (1,000,000  bytes,  not
          1,048,576 bytes).

答案2

如果你坚持使用 tcpdump,davey 的答案是正确的。但是,还有其他捕获数据包的方法,可以生成 pcap 文件,并且有更多选项可用于此类工作。让我们提一下:

  • tshark,属于Wireshark程序。它的-a(“在捕获文件达到 KB 大小后停止写入”)和-b(“当第一个捕获文件填满时,TShark 将切换到下一个文件,依此类推”)选项似乎特别有趣

  • pcapdump,是工具包。请参阅配置选项interval=(捕获 N 秒后移动到下一个文件)和filefmt=(生成捕获文件名称的模式)。

相关内容