我在不同的机器和不同的位置有一个服务器和一个客户端。我正在尝试在服务器机器的接口上使用 tcpdump 捕获 TCP 数据包。我在数据包的有效载荷中注入了一个标识符,以便在显示 tcpdump 的输出时可以识别这些数据包。
我正在使用的完整命令是:
tcpdump -l -AnXSs 0 -i eth0 -tt tcp port 7778 | tee tcpdump_test
如果我给 tcpdump 选项-s 0
(显示整个数据包)连同上面显示的其他选项,tcpdump 似乎错过了到达接口的数据包。
但是,如果我给 tcpdump 选项-s 100
(显示数据包的前 100 个字节)以及上面的其他选项,tcpdump 似乎给了我我期望的所有数据包。
我通过 TCP 发送的数据包越大,我遇到的丢失数据包的比率就越高。一个导入说明是,我收到了客户端和服务器上的所有 tcp 数据包,正如我所期望的,如果我将标志指定-s 0
为 tcpdump ,我只是看不到它们都到达接口
在我丢失数据包并关闭 tcpdump 的情况下,我从 tcpdump 得到以下输出:
126639 packets captured
1544770 packets received by filter
1416694 packets dropped by kernel
但是,当我在不丢失数据包的情况下关闭 tcpdump 时,我从 tcpdump 得到以下输出:
2006 packets captured
2006 packets received by filter
0 packets dropped by kernel
为什么它不捕获所有 TCP 数据包,我该怎么做才能使它捕获所有 TCP 数据包?
我在 Linux SUSU 上使用 tcpdump 4.5.1 版和 libpcap 1.5.3 版运行它