我想用 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).