阅读:1984回复:7
如何获取ARP头
菜鸟求教,我现在成功获取到了ARP类型的以太帧头,现在想获取其ARP头(主要是想获取其IP地址)要怎么获得呢?
代码如下: NdisQueryPacket( Packet, &PhysicalBufferCount, &BufferCount, &FirstBuffer, &TotalPacketLength ); NdisQueryBuffer( FirstBuffer, &VirtualAddress, &Length ); EthernetFrameType = PrintEthernetFrame( (PETHERNET_FRAME)VirtualAddress, Length, IsSend ); if( EthernetFrameType == ETHERNET_FRAME_TYPE_ARP ) { //在这里获取ARP头 } |
|
沙发#
发布于:2008-07-23 19:31
自已先顶一下,求救啊!
|
|
板凳#
发布于:2008-07-24 10:15
高手在哪呀?
|
|
地板#
发布于:2008-07-24 12:54
typedef struct _ETHERNET_FRAME
{ BYTE DestinationAddress[6]; // 0xFFFFFF is Broadcast BYTE SourceAddress[6]; WORD FrameType; // in host-order } EHTERNET_FRAME, *PETHERNET_FRAME; typedef struct _ARP_HEADER { WORD HardType; //硬件类型 WORD ProtocolType; //协议类型 BYTE HardLength; //硬件地址长度 BYTE ProtocolLength; //协议地址长度 WORD Opcode; //操作类型 BYTE SourceMAC[6]; BYTE SourceIP[4]; BYTE DestinationMAC[6]; BYTE DestinationIP[4]; } ARP_HEADER, *PARP_HEADER; typedef struct _ARP { EHTERNET_FRAME EthernetFrame; ARP_HEADER ArpHeader; }ARP, *PARP; //三个结构体 //实现部份 PARP pArp; PVOID VirtualAddress; UINT Length; NdisQueryBuffer( Buffer, &VirtualAddress, &Length ); pArp = (PARP)VirtualAddress; //源IP pArp->ArpHeader.SourceIP[0] pArp->ArpHeader.SourceIP[1] pArp->ArpHeader.SourceIP[2] pArp->ArpHeader.SourceIP[3] //目的地址 pArp->ArpHeader.DestinationIP[0] pArp->ArpHeader.DestinationIP[1] pArp->ArpHeader.DestinationIP[2] pArp->ArpHeader.DestinationIP[3] 想获得MAC可以从以太头获取,获是ARP头获取都可 |
|
地下室#
发布于:2008-07-24 12:55
自己弄出来了,发给大家分享下,高手不知道去哪了
|
|
5楼#
发布于:2008-07-24 12:56
PNDIS_BUFFER Buffer //上面的那个BUFFER
|
|
6楼#
发布于:2008-07-24 13:02
注意以太头的MAC和ARP头的MAC可能不一样
|
|
7楼#
发布于:2008-09-03 23:03
整个帖子都是你在表演啊呵呵……
谢谢你的分享! |
|