tcpdump : 丢包

Joh*_*Doe 3 linux fedora tcpdump

运行,无论是否处于混杂模式:

tcpdump -i "$INTERFACE" -vvv -n -XX -S -s0 -e
Run Code Online (Sandbox Code Playgroud)

当我停止它时,我得到了一堆台词和这个结论:

601 packets captured
938 packets received by filter
230 packets dropped by kernel
Run Code Online (Sandbox Code Playgroud)

为什么会有差异?107个数据包在哪里丢失?是否有可能在本地网络上获取/捕获 100% 的数据包 - 只有我在路由器后面?

Rui*_*iro 5

当 tcpdump “丢弃”数据包时,是因为它没有足够的缓冲区空间来跟上从网络到达的数据包。

捕获和接收的数据包之间的差异可能是由于操作系统或 tcpdump 的实现,或者更常见的是由于使用 ^C 中止进程。

使用“s0”设置每个数据包的缓冲区大小的结果是将其设置为 64KB per man tcpdump;通常我最多将它设置为 1500,如果使用 -X 来查看整个数据包,如果只使用 tcpdump 来查看甚至比所需的更少的标头 - 160 字节,这是 IPv4 标头的大小。

通常使用屏幕也较慢,如果需要速度,如果您不需要实时观看,我会将输出定向到文件。

从人“tcpdump”:

“请注意,拍摄更大的快照既增加了处理数据包所需的时间,又有效地减少了数据包缓冲量。这可能会导致数据包丢失。您应该将 snaplen 限制为将捕获协议信息的最小数量你有兴趣。”