达到特定大小后如何停止使用tcpdump写入捕获文件

问题描述

我正在寻找一些解决方案以在捕获到指定大小后停止捕获tcpdump数据包。我正在使用以下命令来实现这一目标,但看起来tcpdump并未将所有捕获的数据包都写入指定的文件(myfile .pcap)。

sudo tcpdump -i en0 -C 10 -W 1 -z ./stop-tcpdump.sh -w myfile.pcap -K -n

cat stop-tcpdump.sh 
#!/bin/sh
TCP_EXECUTABLE="tcpdump"
pid=$(pidof ${TCP_EXECUTABLE})
sudo kill -2 $pid

解决方法

tcpdump的最简单解决方案可能只是将-W 1增加到-W 2。这将导致开始写入第二个捕获文件,但是10MB的第一个文件将保持完整而不是被截断,因为tcpdump实例不一定会由于计时问题而被杀死。

或者,您可以切换为使用dumpcaptshark,它们都支持显式的-a filesize:value选项,因此不需要后旋转终止脚本。请注意,与tcpdump的{​​{1}}选项不同,此选项期望以kB而不是MB为单位的值。