我希望这可以阐明这个问题。从联机帮助页:
当tcpdump完成捕获数据包时,它将报告以下计数:
捕获的数据包(这是tcpdump已接收和处理的数据包数量);
过滤器接收到的数据包(其含义取决于您运行tcpdump的操作系统,并且可能取决于操作系统的配置方式-如果在命令行上指定了过滤器,则在某些操作系统上,它将对数据包进行计数,而不管是否它们与过滤器表达式匹配,即使它们与过滤器表达式匹配,无论tcpdump是否已读取和处理它们,在其他OS上,无论tcpdump是否已读取,它仅计算与过滤器表达式匹配的数据包并对其进行处理,在其他操作系统上,它仅计算与过滤器表达式匹配并由tcpdump处理的数据包);
内核丢弃的数据包(如果操作系统向应用程序报告该信息,这是运行tcpdump的操作系统中的数据包捕获机制由于缺少缓冲区空间而丢弃的数据包的数量;否则,它是将报告为0)。
还有2009年的邮件列表条目,说明:
“过滤器收到的数据包”编号是ps_recv
从调用的编号pcap_stats()
;使用BPF时,这是的bs_recv
数字BIOCGSTATS ioctl
。该计数包括所有交给BPF的数据包;这些数据包可能仍在尚未被libpcap读取的缓冲区中(因此没有传递给tcpdump),或者可能在libpcap所读取但尚未传递给tcpdump的缓冲区中,因此它可以对那些没有报告为“被俘”。
也许进程杀死得太快了?还有一个-c N
标志告诉tcpdump N
在捕获数据包时退出。
因为你的问题似乎很专业,你也可以使用libpcap
直接或通过数以百计的语言绑定之一。
对于您的问题,由于您所获得的只是文件中捕获的软件包,因此capture.cap
您可以仅查看不为空的运行并检查这些运行,即,计算行数吗?
tcpdump -r capture.cap | wc -l
使用libpcap返回捕获文件中的条目数可能是更好的方法...