我tcpdump
用Ctrl+打断C并得到了这个总摘要:
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
Run Code Online (Sandbox Code Playgroud)
什么是“内核丢弃的数据包”?为什么会这样?
Dmi*_*try 54
来自 tcpdump 的手册:
“被内核丢弃”的数据包(这是由于缺少缓冲区空间而被运行 tcpdump 的操作系统中的数据包捕获机制丢弃的数据包数量,如果操作系统向应用程序报告该信息;如果不是,则报告为0)。
一点解释:
所述tcpdump
捕获原始数据包经过的网络接口。数据包必须根据您在命令行中指定的规则进行解析和过滤,这需要一些时间,因此必须对传入的数据包进行缓冲(排队)以进行处理。有时有太多的数据包,它们被保存到缓冲区,但它们保存的速度比处理速度快,因此最终缓冲区空间不足,因此内核丢弃所有进一步的数据包,直到缓冲区中有一些可用空间。
您可以使用-B
( --buffer-size
) 选项增加缓冲区大小,如下所示:
tcpdump -B 4096 ....
Run Code Online (Sandbox Code Playgroud)
请注意,大小以千字节为单位指定,因此上面的行将缓冲区大小设置为 4MB。
小智 30
要考虑/尝试的另一件事是,tcpdump
可能会花费大量时间进行 DNS 查询以将 IP 解析为域名。如果您不需要这些,请尝试加入-n
(无查找)标志。例如:
tcpdump -n port 80
Run Code Online (Sandbox Code Playgroud)