2011-07-22 36 views
9

使用tcpdump时,我似乎无法看到捕获的所有数据。具体来说,我似乎错过了框架头6个字节,我想知道是否有人可以解释为什么。如何使用tcpdump查看完整的snaplen捕获?

为了说明问题,我在VMWare上以仅主机的网络配置安装了一个Ubuntu实例。产生的流量我ping通网关的VMWare ...在我的情况:

$ ping 192.168.153.1 

我们捕获和打印数据:

$ tcpdump -i eth0 -x -s 64 
... 
10:23:24.419067 IP 192.168.153.1 > ubuntu.local: ICMP echo reply, id 2959, seq 137, length 64 
    0x0000: 4500 0054 2313 4000 4001 63bf c0a8 9901 
    0x0010: c0a8 9984 0000 af80 0b8f 0089 0cb2 294e 
    0x0020: 1d64 0600 0809 0a0b 0c0d 0e0f 
10:23:25.418807 IP ubuntu.local > 192.168.153.1: ICMP echo request, id 2959, seq 138, length 64 
    0x0000: 4500 0054 0000 4000 4001 86d2 c0a8 9984 
    0x0010: c0a8 9901 0800 df7f 0b8f 008a 0db2 294e 
    0x0020: e463 0600 0809 0a0b 0c0d 0e0f 

由于在这一点上预期的字节节目总数不64;数据链路头被隐藏,并且IP字节是第一个出现的,即'4500'。要显示数据链接标题字节,我添加另一个x。

$ tcpdump -i eth0 -xx -s 64 
... 
10:29:29.523043 IP 192.168.153.1 > ubuntu.local: ICMP echo reply, id 2959, seq 501, length 64 
    0x0000: 000c 292a 4f6c 0050 56c0 0001 0800 4500 
    0x0010: 0054 b305 4000 4001 d3cc c0a8 9901 c0a8 
    0x0020: 9984 0000 007d 0b8f 01f5 79b3 294e 5cfa 
    0x0030: 0700 0809 0a0b 0c0d 0e0f 
10:29:30.522884 IP ubuntu.local > 192.168.153.1: ICMP echo request, id 2959, seq 502, length 64 
    0x0000: 0050 56c0 0001 000c 292a 4f6c 0800 4500 
    0x0010: 0054 0000 4000 4001 86d2 c0a8 9984 c0a8 
    0x0020: 9901 0800 f77b 0b8f 01f6 7ab3 294e 5cfa 
    0x0030: 0700 0809 0a0b 0c0d 0e0f 

现在显示更多字节。我认为它们是以太网帧头的14个字节(dest,源MAC + ethertype = 14个字节)。相应地,IP头现在开始向下14个字节。

但为什么仍然有6个字节丢失?请注意,只显示了58个字节 - 我期望可以看到64个字节。

回答

5

尝试使用tcpdump的与-s0

我尝试这样做,它为我工作。(这只是你只需要-s0为例)

tcpdump -X -s0 port 21

+0

感谢您的建议。这也适用于我显示数据包的完整尾部(比64更多的字节),但即使使用-s0,似乎还有6个字节从头部丢失。我误解你的回应? –

2

最小的以太网帧大小64个字节。当有效载荷太小时,以太网将填充其内容。 IP头的总长度值将用于确定填充开始的位置,这将被丢弃,因此不会被Tcpdump显示。