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% 的数据包 - 只有我在路由器后面?
当 tcpdump “丢弃”数据包时,是因为它没有足够的缓冲区空间来跟上从网络到达的数据包。
捕获和接收的数据包之间的差异可能是由于操作系统或 tcpdump 的实现,或者更常见的是由于使用 ^C 中止进程。
使用“s0”设置每个数据包的缓冲区大小的结果是将其设置为 64KB per man tcpdump
;通常我最多将它设置为 1500,如果使用 -X 来查看整个数据包,如果只使用 tcpdump 来查看甚至比所需的更少的标头 - 160 字节,这是 IPv4 标头的大小。
通常使用屏幕也较慢,如果需要速度,如果您不需要实时观看,我会将输出定向到文件。
从人“tcpdump”:
“请注意,拍摄更大的快照既增加了处理数据包所需的时间,又有效地减少了数据包缓冲量。这可能会导致数据包丢失。您应该将 snaplen 限制为将捕获协议信息的最小数量你有兴趣。”