首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急关于抓取ARP包,该如何解决

2012-03-03 
急,关于抓取ARP包typedefstructtagDLCHeader{unsignedcharDesMAC[6]unsignedcharSrcMAC[6]unsignedshort

急,关于抓取ARP包
typedef       struct       tagDLCHeader                                                                                          
    {      
        unsigned       char                           DesMAC[6];                                                            
        unsigned       char                           SrcMAC[6];                                                        
        unsigned       short                       Ethertype;                                                                
    }       DLCHEADER,       *PDLCHEADER;      
       
    //       ARP       Frame      
    typedef       struct       tagARPFrame                                                                                              
    {      
                                            unsigned       short                                       HW_Type;                                              
                                            unsigned       short                                       Prot_Type;                                                          
                                            unsigned       char                           HW_Addr_Len;                              


                                            unsigned       char                           Prot_Addr_Len;                                      
                                        unsigned       short                                       Opcode;                                                                        
                                            unsigned       char                           Send_HW_Addr[6];                      
                                            unsigned       long                           Send_Prot_Addr;                          
                                            unsigned       char                           Targ_HW_Addr[6];                      
                                            unsigned       long                           Targ_Prot_Addr;                        
   
    }       ARPFRAME,       *PARPFRAME;      
       
    //       ARP       Packet       =       DLC       header       +       ARP       Frame      
    typedef       struct       tagARPPacket                                                                          
    {      
                    DLCHEADER                       dlcHeader;      
                ARPFRAME                           arpFrame;      


    }       ARPPACKET,       *PARPPACKET;    


我根据要求定义上面的结构,

然后抓包
recv(RawSocket,RecBuf,Max,0);

定义一个ARP包对象:ARPPACKET   ARPPack;

把受到的数据RevBuf赋值给ARPPack
memcpy(&ARPPack,a,Max);//Max=42

然后我就检查ARPPack.dlcHeader.Ethertype==htons(0x0806)
看是否是ARP包。但是程序在局域网里跑了N久,但ARPPack.dlcHeader.Ethertype总是不等于htons(0x0806)。
 
我实在学校里做的,有很多台电脑,ARP包应该很多才对啊。
不解!!!!!!!


[解决办法]

[解决办法]
raw socket可以抓ARP包吗?
[解决办法]
http://blog.csdn.net/yuguanglou/archive/2004/11/06/169932.aspx

热点排行