我们有一个脚本调用
tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap
Run Code Online (Sandbox Code Playgroud)
在多个 IP 上,而脚本的其他部分在后台启动一些流量。我们想要检查数据包是否返回给我们,并仅在我们收到数据包时手动检查那些情况。tcpdump 的错误输出起初似乎很好,但是。
问题是,正如主题所暗示的那样,“捕获的数据包”和“过滤器接收的数据包”之间有什么区别?有捕获,没有记录任何数据包,但输出“捕获0个数据包,过滤器接收到2个数据包”这听起来很矛盾,因为如果没有捕获数据包,那么其中的2个如何过滤?起初,我们一直在寻找“过滤器收到的 0 个数据包”,但当没有收到数据包时,它并不总是写入错误输出。那么这些数字说明了什么?
如果我们想过滤没有收到回复数据包的情况,我需要知道要查找什么。
sr_*_*sr_ 12
我希望这能对这个问题有所了解。从联机帮助页:
当 tcpdump 完成捕获数据包时,它将报告以下计数:
捕获的数据包(这是 tcpdump 已接收和处理的数据包数量);
过滤器收到的数据包(其含义取决于运行 tcpdump 的操作系统,也可能取决于操作系统的配置方式 - 如果在命令行上指定了过滤器,则在某些操作系统上,无论是否它们与过滤器表达式匹配,即使它们与过滤器表达式匹配,无论 tcpdump 是否已读取并处理它们,在其他操作系统上,它只计算过滤器表达式匹配的数据包,无论 tcpdump 是否已读取并处理它们,在其他操作系统上,它只计算与过滤器表达式匹配并由 tcpdump 处理的数据包);
内核丢弃的数据包(这是由于缺少缓冲区空间而被运行 tcpdump 的操作系统中的数据包捕获机制丢弃的数据包数量,如果操作系统将该信息报告给应用程序;如果没有,则它将报告为 0)。
还有一个 2009 年的邮件列表条目解释:
“过滤器接收到的数据包”编号是
ps_recv
呼叫的编号pcap_stats()
;使用BPF,这是bs_recv
来自BIOCGSTATS ioctl
. 该计数包括传递给 BPF 的所有数据包;这些数据包可能仍位于尚未被 libpcap 读取的缓冲区中(因此未交给 tcpdump),或者可能位于已被 libpcap 读取但尚未交给 tcpdump 的缓冲区中,因此它可以计算未报告为“已捕获”。
也许这个过程被杀死得太快了?还有一个-c N
标志告诉 tcpdumpN
在捕获数据包时退出。
由于您的问题似乎非常专业,您也可以libpcap
直接使用或通过数百种语言绑定之一使用。
对于你的问题,因为你得到的只是文件中捕获的包capture.cap
,你可以看看它不是空的运行并检查这些,即,嗯,计算行数?
tcpdump -r capture.cap | wc -l
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法使用 libpcap 返回捕获文件中的条目数...
归档时间: |
|
查看次数: |
47355 次 |
最近记录: |