tcpdump:“捕获的数据包”与“过滤器接收的数据包”

tcpdump:“捕获的数据包”与“过滤器接收的数据包”

我们有一个脚本调用

tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap

在多个 IP 上,而脚本的其他部分在后台启动一些流量。我们想要检查数据包是否返回给我们,并仅在收到包裹时手动检查这些情况。 tcpdump 的错误输出一开始似乎对此没问题,但是。

问题是,正如主题所暗示的那样,“捕获的数据包”和“过滤器接收的数据包”之间有什么区别?有捕获,没有记录任何数据包,但输出“捕获了0个数据包,过滤器收到了2个数据包”,这听起来很矛盾,因为如果没有数据包被捕获,那么其中2个数据包是如何被过滤的?起初,我们一直在寻找“过滤器收到的 0 个数据包”,但当没有收到数据包时,这并不总是写入错误输出。那么这些数字说明了什么?

如果我们想在未收到回复数据包时过滤这些情况,我需要知道要查找什么。

答案1

我希望这能让我们对这个问题有所了解。从联机帮助页:

当 tcpdump 完成捕获数据包时,它将报告以下计数:

捕获的数据包(这是 tcpdump 已接收并处理的数据包数量);

过滤器收到的数据包(其含义取决于您运行 tcpdump 的操作系统,并且可能取决于操作系统的配置方式 - 如果在命令行上指定了过滤器,则在某些操作系统上,它会对数据包进行计数,无论它们是否与过滤器表达式,即使它们与过滤器表达式匹配,无论 tcpdump 是否已读取并处理它们,在其他操作系统上,它仅计算与过滤器表达式匹配的数据包,无论 tcpdump 是否已读取并处理它们,在其他操作系统上,它仅计算与过滤器表达式匹配并由 tcpdump 处理的数据包);

内核丢弃的数据包(如果操作系统向应用程序报告该信息,则这是由于缺少缓冲区空间而被运行 tcpdump 的操作系统中的数据包捕获机制丢弃的数据包数量;如果没有,则会报告为0)。

还有2009 年的邮件列表条目解释:

“过滤器收到的数据包”号码是ps_recv呼叫 的号码pcap_stats();和带通滤波器,这是bs_recv来自 的号码BIOCGSTATS ioctl。该计数包括所有交给 BPF 的数据包;这些数据包可能仍在 libpcap 尚未读取的缓冲区中(因此未交给 tcpdump),或者可能位于 libpcap 已读取但尚未交给 tcpdump 的缓冲区中,因此它可以对以下数据包进行计数:没有被报告为“被捕获”。

也许进程被杀死得太快了?还有一个标志告诉 tcpdump 在捕获数据包-c N时退出。N

由于您的问题似乎非常专业,您也可以libpcap直接使用或者通过数百种语言绑定之一

对于你的问题,因为你得到的只是被捕获文件中的包capture.cap,您可以只查看非空的运行并检查这些,即,呃,计算行数?

tcpdump -r capture.cap | wc -l

可能有更好的方法使用 libpcap 返回捕获文件中的条目数......

相关内容