WinPcap学习(六)过滤数据包

用来过滤数据包的函数是pcap_compile()和pcap_setfilter()。

pcap_complie()它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。

pcap_setfilter()将一个过滤器与内核捕获会话相关联。当pcap_setfilter()被调用时,这个过滤器将被应用到来自网络的所有数据包,并且,所有的符合要求的数据包,将会立刻复制给应用程序。

 

   if (d->addresses != NULL)
        /* 获取接口第一个地址的掩码 */
        netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
    else
        /* 如果这个接口没有地址,那么我们假设这个接口在C类网络中 */
        netmask=0xffffff; 


compile the filter
    if (pcap_compile(adhandle, &fcode, "ip and tcp", 1, netmask) < 0)
    {
        fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }
    
set the filter
    if (pcap_setfilter(adhandle, &fcode) < 0)
    {
        fprintf(stderr,"\nError setting the filter.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return -1;
    }

 

最后欢迎大家访问我的个人网站: 1024s

 

 

 

你可能感兴趣的:(c++/c)