读书人

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

发布时间: 2012-03-03 15:33:03 作者: rapoo

急,关于抓取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

读书人网 >C++

热点推荐