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