小弟最近用MFC+WinPcap开发了一个简单的嗅探工具,本来意图是截获网卡上获得的所有的包(包括不是发送给自己主机的包),我上网查了相关资料后知道只要把网卡设置为混杂模式就可以了,方法是pcap_open_live的第三个参数设置为1就可以了,但我现在的问题是即使我按照上述方法将网卡设置为混杂模式依然不能收到除了发送给自己主机或自己主机发送出去的包以外的包,不知道是硬件限制还是其他什么原因?不过自我感觉应该不是硬件限制的问题,因为我下载过一个叫聚生网管的局域网管理软件是可以正常工作的。望各位高手指教。

解决方案 »

  1.   

    嗅探 并不能弄到所有数据, 你的情况正常要实现监视所有数据要用驱动或者HookAPI
      

  2.   

    就像对文件操作时要取得文件描述符一样,在这里要取得网卡的描述符
    pcap_t * pcap_open_live ( char * device, int snaplen, int promisc, 
                              int to_ms, char * errbuf );
    pcap_t就是网卡描述符的类型,
    device是设备名,如eth0
    snaplen是要抓获的最大的包的字节数
    promisc如果为非0的话,则将网卡设为混杂模式
    to_ms是超时时间,如果为0则永不超时
    。Winpcap定义了三种标志:
             PCAP_OPENFLAG_PROMISCUOUS:1,它定义了适配器(网卡)是否进入混杂模式(promiscuous mode)。
             PCAP_OPENFLAG_DATATX_UDP:2,它定义了数据传输(假如是远程抓包)是否用UDP协议来处理。
             PCAP_OPENFLAG_NOCAPTURE_RPCAP:4,它定义了远程探测器是否捕获它自己产生的数据包。
      

  3.   

    pcap_t   *   pcap_open_live   (   char   * device, int   snaplen,   int   promisc,   
                                      int   to_ms,   char   *  rrbuf   ); 
    这函数怎么设置标志位,它才不抓取自己发出的包啊?谢谢~!