Winpcap打开适配器并捕获数据包:过滤数据包
来源:互联网 发布:国内互联网网络股票 编辑:程序博客网 时间:2024/06/10 14:43
WinPcap和Libpcap的最强大的特性之一,是拥有过滤数据包的引擎。它提供了有效的方法去获取网络中的某些数据包,这也是WinPcap捕获机制中的一个组成部分。用来过滤数据包的函数是pcap_compile() 和pcap_setfilter() 。
pcap_compile()它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。有关布尔过滤表达式的语法可以参见Filtering expression syntax这一节的内容。
pcap_setfilter()将一个过滤器与内核捕获会话向关联。当pcap_setfilter() 被调用时,这个过滤器将被应用到来自网络的所有数据包,并且,所有的符合要求的数据包 (即那些经过过滤器以后,布尔表达式为真的包),将会立即复制给应用程序。
以下代码展示了如何编译并设置过滤器。请注意,我们必须从pcap_if结构体中获得掩码,因为一些使用pcap_compile() 创建的过滤器需要它。
在这段代码片断中,传递给 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"); /* 释放设备列表 */ 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; }
- Winpcap打开适配器并捕获数据包:过滤数据包
- Winpcap打开适配器并捕获数据包
- WinPcap编程【4】打开适配器并捕获数据包
- WinPcap编程【4】打开适配器并捕获数据包
- WinPcap学习(四)打开适配器并捕获数据包
- WinPcap笔记(4):打开适配器并捕获数据包
- WinPcap教程:(3)打开适配器并捕获数据包
- Winpcap打开适配器并捕获数据包:不用回调方法捕获数据包
- Winpcap打开适配器并捕获数据包:解析所捕获的数据包的协议首部
- 打开适配器并捕获数据包
- 打开适配器并捕获数据包
- WinPcap编程入门(3)——打开适配器并捕获数据包
- Winpcap捕获数据包并转发
- WinPcap捕获数据包
- 用WinPcap技术捕获数据包
- 利用WinPcap技术捕获数据包
- 利用WinPcap技术捕获数据包
- WinPcap基础知识(第三课:打开一个适配器捕捉数据包)
- Winpcap打开适配器并捕获数据包
- Android 将少量的数据文件保存在 data/data 目录下
- 浅谈C++ 之RAII
- Winpcap打开适配器并捕获数据包:不用回调方法捕获数据包
- hdu1753 大明A+B
- Winpcap打开适配器并捕获数据包:过滤数据包
- 一个简单的注册页面
- Winpcap打开适配器并捕获数据包:解析所捕获的数据包的协议首部
- wamp的80端口被Microsoft-HTTPAPI/2.0占用问题
- android 提升性能总结
- 2012.7.29
- linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
- ORACLE SQL性能优化系列 (二)
- generation unfair