理论教育 Winpcap原理与结构解析

Winpcap原理与结构解析

时间:2023-11-22 理论教育 版权反馈
【摘要】:Winpcap分为内核级和用户级两级,包含NPF、packet.dll、wpcap.dll 3个模块。Winpcap在Windows系统中所处的位置如图10-5所示。图10-5Winpcap的组成及在Windows中的位置从图可以看出,Winpcap的内核在NDIS之上,它的函数库可供应用程序使用。Winpcap的主要特点在于独立于主机协议而发送和接收原始数据包。Winpcap核心部分是包过滤驱动程序NPF。Winpcap用户部分包含两个模块。在Microsoft Visual C++ 6.0环境中编写Winpcap程序之前,需要对VC6.0进行一些相关的设置。

Winpcap原理与结构解析

在使用Winpcap开发应用程序之前,需要安装Winpcap虚拟设备驱动程序,它安装在Windows的内核中,可以捕获和发送原始数据包。Winpcap分为内核级和用户级两级,包含NPF、packet.dll、wpcap.dll 3个模块。Winpcap在Windows系统中所处的位置如图10-5所示。

978-7-111-31053-2-Chapter10-19.jpg

图10-5 Winpcap的组成及在Windows中的位置

从图可以看出,Winpcap的内核在NDIS之上,它的函数库可供应用程序使用。Winpcap的主要特点在于独立于主机协议(如TCP/IP)而发送和接收原始数据包。也就是说,Win-pcap是独立于Windows网络协议栈而独自工作的,因此它的应用程序无法享受Windows协议栈对上层数据的包装功能,它的应用程序需要处理数据包的每个字段。和Socket相比,它发送和接收的数据包更加原始,功能也更加灵活,但编程的难度也有所增加,因为它需要在程序中处理数据包的每个字段。同时需要强调,Winpcap不能阻塞、过滤或控制其他应用程序数据包的收发,它仅仅只是监听共享网络上传输的数据包,将网络上的数据包复制一份交给它上层的应用程序。因此,它无法实现基于内核的包过滤,如个人防火墙。(www.daowen.com)

Winpcap核心部分是包过滤驱动程序NPF(Netgroup Packet Filter)。NPF有两个主要部件Network Tap和Packet Filter。Network Tap位于NDIS之上,当一个数据包到达网络接口时,数据链路层驱动程序将其复制一份交给Network Tap,Network Tap会将数据包交给Pack-et Filter进行过滤,符合过滤条件的原始数据包将被送入核心缓冲区,在数据包上附加时间戳、数据包长度等信息之后,再提交给用户缓冲区供应用程序使用。

Winpcap用户部分包含两个模块。packet.dll模块提供了Win32平台下与NPF的一个通用接口,用户可以通过它提供的API进行一些底层操作。wpcap.dll则提供了更高级的用户调用函数,它通过调用packet.dll提供的函数生成。packet.dll直接映射了内核的调用,wp-cap.dll则提供了功能更加强大的函数调用。在实际编程时,既可以使用packet.dll直接调用内核,也可以使用wpcap.dll提供的函数。对wpcap.dll的调用最终也将转化为对packet.dll中低级函数的调用。

在Microsoft Visual C++ 6.0环境中编写Winpcap程序之前,需要对VC6.0进行一些相关的设置。要注意的是,在使用Winpcap开发的程序中都要把声明Winpcap数据结构和函数的头文件pcap.h包含进来,同时把Winpcap提供的packet.lib和wpcap.lib链接到程序中。具体做法如下:在官方网站http://www.winpcap.org下载Winpcap的驱动程序及开发包Wp-dPack。WpdPack中包含有Winpcap编程所需的头文件、lib库文件、一些示例程序和帮助文档。然后进入Microsoft Visual C++ 6.0,依次点击菜单“Tools”→“Options”→“Directories”→“show directoriesfor”→“Library files”,将开发包中的Lib目录添加进去;在“show directories for”→“Include files”中,将Winpcap开发包中的Include目录添加进去。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈