先说下我的环境:两台机器通过一个华三S5016P这个交换机连接,用一台机器A往另一台机器B发UDP包,机器B用winpcap抓包,抓包过滤参数是只收到UDP包并且目的地址机器B的包。但是我在读取抓到的ethernet包那段内存时却显示如下:0x010471C4  00 1d 09 13 15 30 00 12 79  .....0..y
0x010471CD  c2 8a dd 08 00 45 00 00 44  ÂŠÝ..E..D
0x010471D6  5a 61 00 00 80 11 5e 15 c0  Za..€.^.À
0x010471DF  a8 00 04 c0 a8 00 de 04 32  ¨..À¨.Þ.2
0x010471E8  08 ae 00 30 5c 68 34 30 36  .®.0\h406
0x010471F1  35 32 36 61 61 61 61 61 61  526aaaaaa
0x010471FA  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x01047203  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x0104720C  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x01047215  61 ad ba 0b c6 e4 47 20 18  a­º.ÆäG .
0x0104721E  0b 00 52 00 00 00 52 00 00  ..R...R..
0x01047227  00 14 00 40 80 00 1d 09 13  ...@€....
0x01047230  15 30 00 12 79 c2 8a dd 08  .0..yŠÝ.
0x01047239  00 45 00 00 44 5a 88 00 00  .E..DZˆ..
0x01047242  80 11 5d ee c0 a8 00 04 c0  €.]îÀ¨..À
0x0104724B  a8 00 de 04 32 08 ae 00 30  ¨.Þ.2.®.0
0x01047254  58 69 34 30 36 35 36 35 61  Xi406565a
0x0104725D  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x01047266  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x0104726F  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x01047278  61 61 61 61 61 61 ad ba 0b  aaaaaa­º.
0x01047281  c6 e4 47 10 20 0b 00 52 00  ÆäG. ..R.
0x0104728A  00 00 52 00 00 00 14 00 06  ..R......
0x01047293  04 00 1d 09 13 15 30 00 12  ......0..
0x0104729C  79 c2 8a dd 08 00 45 00 00  yŠÝ..E..
0x010472A5  44 5a 9a 00 00 80 11 5d dc  DZš..€.]Ü
0x010472AE  c0 a8 00 04 c0 a8 00 de 04  À¨..À¨.Þ.
0x010472B7  32 08 ae 00 30 56 6b 34 30  2.®.0Vk40
0x010472C0  36 35 38 33 61 61 61 61 61  6583aaaaa
0x010472C9  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x010472D2  61 61 61 61 61 61 61 61 61  aaaaaaaaa按我目前的知识理解:
0x010471C4  00 1d 09 13 15 30 00 12 79  .....0..y
0x010471CD  c2 8a dd 08 00                            这段内存是ethernet包头。                               45 00 00 44  ÂŠÝ..E..D
0x010471D6  5a 61 00 00 80 11 5e 15 c0  Za..€.^.À
0x010471DF  a8 00 04 c0 a8 00 de                      这段内存是IP包的包头。                                      04 32  ¨..À¨.Þ.2
0x010471E8  08 ae 00 30 5c 68                         这段内存是UDP包的包头。                                  34 30 36  .®.0\h406
0x010471F1  35 32 36 61 61 61 61 61 61  526aaaaaa
0x010471FA  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x01047203  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x0104720C  61 61 61 61 61 61 61 61 61  aaaaaaaaa
0x01047215  61                                        这段内存是UDP包的数据。                 ad ba 0b c6                             这4个字节是ethernet包的包尾,也就是其CRC值。我的疑问是:                               e4 47 20 18  a­º.ÆäG .
0x0104721E  0b 00 52 00 00 00 52 00 00  ..R...R..
0x01047227  00 14 00 40 80                            这18个字节是什么东西?该怎么解释?也就是在两个以太包之间的数据是什么?
是我以前理解的不对,还是其他什么的?
希望知道的能解释一下,谢谢!

解决方案 »

  1.   

    抓到的数据包内容中还包含WinPCap的对数据包进行分隔定位的数据
    看懂WinPCAP的代码或例程,这些数据就应该很清楚了
      

  2.   

    看了就头大, winpcap 是很久以前在大学里编pppoe密码窥探时候用的,也用过他去爆学校的pppoe服务器.......兄弟,我只记得,winpcap是返回包括MAC数据头的,最原始数据的.您应该从学习最基础的MAC协议, 就是开始好象是 6个目标mac,6个本地mac,然后2个字节协议代码,表明接下去的数据是某种协议编码.一般是ip协议.当然,如果是pppoe的话就是另外一种了,很有意思的.可惜我全忘了,代码也找不到了.记住,在网络中, 数据排列和内存中排列不同的, 您得到的协议如果是: 0x0800 那么就是协议 0008.
      

  3.   

    我用WinPcap也好久了,但你说的没研究过,我觉得这块数据可能是缓冲中未初始化的数据,我们通常是用结构体发送/接收数据的,但是实际上用pacp设置的接收缓冲比这个长度肯定大,比如说一般缓冲设为256B或者512B,所以可能缓冲中有很多未被使用的数据。个人理解而已,还望高手指正
      

  4.   

    应该就是Winpcap抓到的包的包头,也就是
    struct bpf_hdr {struct timeval    bh_tstamp;// 捕获到packettimestamp:UINT    bh_caplen;// 捕获到packet长度:UINT    bh_datalen;// 原始packet长度:USHORT       bh_hdrlen;// bpf header长度(this struct plus alignment padding):
    }; 
    正好18个字节。我觉得应该是这个,不知道对不对?再等一天,看看有没有高手确认一下。
    今晚结贴。