sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1984回复:7

如何获取ARP头

楼主#
更多 发布于:2008-07-23 19:10
菜鸟求教,我现在成功获取到了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头


}
sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-07-23 19:31
自已先顶一下,求救啊!
sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-07-24 10:15
高手在哪呀?
sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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头获取都可
sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-07-24 12:55
自己弄出来了,发给大家分享下,高手不知道去哪了
sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-07-24 12:56
PNDIS_BUFFER Buffer //上面的那个BUFFER
sunbelt
驱动牛犊
驱动牛犊
  • 注册日期2007-05-30
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-07-24 13:02
注意以太头的MAC和ARP头的MAC可能不一样
csm_529
驱动牛犊
驱动牛犊
  • 注册日期2008-09-03
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望27点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-09-03 23:03
整个帖子都是你在表演啊呵呵……
谢谢你的分享!
游客

返回顶部