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

How to stop writing to a capture file using tcpdump after it reaches a specific size

我正在寻找一些解决方案,以在捕获到指定大小后停止捕获 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 实例不一定会由于计时问题而被杀死。

或者,您可以切换到使用 dumpcap or tshark,两者都支持显式 -a filesize:value 选项,因此不需要 post-rotate 终止脚本。请注意,与 tcpdump-C 选项不同,此选项需要以 kB 为单位的值,而不是 MB。