cnpaf.net - 中国协议分析网

投递文章 投稿指南 RSS订阅 网站通告:
搜索: 您的位置主页>协议分析>Winpcap>阅读文章

循序渐进学习使用WINPCAP(五)

10-16 08:01 来源: 作者: 【 评论:0 浏览:
WinPcap或libpca最强大的特点之一就是数据流的过滤引擎。它提供一种高效的方法来只捕获网络数据流的某些数据而且常常和系统的捕获机制相集成。过滤数据的函数是pcap_compile() 和 pcap_setfilter()来实现的。
WinPcap或libpca最强大的特点之一就是数据流的过滤引擎。它提供一种高效的方法来只捕获网络数据流的某些数据而且常常和系统的捕获机制相集成。过滤数据的函数是pcap_compile() 和 pcap_setfilter()来实现的。


pcap_compile()来编译一个过滤设备,它通过一个高层的boolean型变量和字串产生一系列的能够被底层驱动所解释的二进制编码。boolean表示语法能够在这个文件的过滤表示语法中找到。

pcap_setfilter() 用来联系一个在内核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中。

下面的代码展示了如何编译并社定一个过滤设备。注意我们必须从pcap_if结构中获得掩码,因为一些过滤器的创建需要这个参数。

下面的代码段中的pcap_compile()的"ip and tcp"参数说明只有IPV4和TCP数据才会被内核保存并被传递到应用程序。



  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");
    /* Free the device list */
    pcap_freealldevs(alldevs);
    return -1;
  }
  
  //set the filter
  if(pcap_setfilter(adhandle, &fcode)<0){
    fprintf(stderr,"\nError setting the filter.\n");
    /* Free the device list */
    pcap_freealldevs(alldevs);
    return -1;
  }

如何你想进一步查看本节中用过滤器过滤数据流的例子可以查看下一节《数据的解包》。

收藏此篇文章内容到:
Tags:
责任编辑:
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 密码: 匿名:
    评论总数:0 [ 查看全部 ] 网友评论
    关于我们 - 广告合作 - 网站地图 - 版权说明 - 网站历史 - 世界排名 - 加入收藏 - 设为首页 - 返回顶部