我要用winpcap提供的packet32提供的函数做了个网络监视的程序,监测网络中的arp包
比如
PacketReceivePacket(lpAdapter,lpPacket,TRUE)我怎么才能解析收到的数据呢??怎么知道他是不是arp包,lpAdapter指示本机网卡信息,而lpPacket是收到的信息,它是不是以太网的帧格式!!??
typedef struct _ehhdr 
{
unsigned char DestMAC[6];
unsigned char SourceMAC[6];
unsigned short EthernetType;
}EHHDR, *PEHHDR;           // 以太网结构typedef struct _PACKET {  
  
HANDLE       hEvent;
OVERLAPPED   OverLapped;
PVOID        Buffer;
UINT         Length;
UINT         ulBytesReceived;
BOOLEAN      bIoComplete;
}  PACKET, *LPPACKET;    用下面的代码为什么不行???
    EHHDR * pointer;  

pointer =(EHHDR * ) lpPacket->Buffer;
            if (pointer->EthernetType==0x80f3) 
printf("\n%02x",pointer->EthernetType);

解决方案 »

  1.   

    网上应该有很多现成的东东吧!
    你可以参考一下
    http://winpcap.polito.it/docs/man/html/index.html
    教你很仔细的
      

  2.   

    if (pointer->EthernetType==0x80f3) 
    是什么意思?0x80f3是代表什么网络类型?FT!如果你要玩sniffer,先去看《TCP/IP详解》第一卷和一堆RFC,把网络协议的基本知识先搞清楚!还有,winpcap是从libpcap发展过来的,所以你可以直接用libpcap的函数,我喜欢这种方式。
      

  3.   

    if (pointer->EthernetType==0x80f3) 是不是有问题?
    应该是0x0806吧,这才是ARP包
      

  4.   

    winpcap提供了很多发送包、接收包的函数,不知道有什么区别?
    现在想向大家请教一下例如,发送一个包
    BOOLEAN PacketSendPacket (LPADAPTER AdapterObject, LPPACKET lpPacket, BOOLEAN Sync) int pcap_sendpacket  (  pcap_t * p, u_char * buf,  int  size)   
    发送一组包
    INT PacketSendPackets (LPADAPTER AdapterObject, PVOID PacketBuff, ULONG Size, BOOLEAN Sync) u_int  pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync) 
    接收包也有很多这方面的函数,是不是两者用于不同的操作系统平台啊?如果我是WINDOWS操作系统,想按照以太网格式(目的MAC,源MAC,类型,……),
    那该用哪个函数呢?