2.2.3 WinPcap
这是一个基于Win32的捕获数据包和网络分析的体系结构, 它包括一个内核级的包过滤器, 一个底层的动态链接库( Packet. dll) , 一个高层并且与系统无关的库( WPcap.dll, 基于LibPcap0. 6.2版本) 。WinPcap是集成于Windows95,98, ME,NT,2000和XP操作系统的设备驱动程序, 它可以从网卡捕获或者发送原始数据, 同时能够过滤并且存储数据包。开发WinPcap这个项目的目的在于为Win32应用程序提供访问网络底层的能力。
2.2.4 cap
cap是一个能够捕获、发送网络数据包的Java类库包。这个包用到了LibPcap和原始套接字API。目前cap在FreeBSD3. x, LinuxRedHat 6. 1,
Solaris 和Mi-crosoft Windows 2000/XP 系统上已经做过测试, 并且支持Ethernet,IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4协议。-cap是一个Java类集合,它为网络数据包的捕获提供接口和系统支持。初版本是2000年6月发布的cap0.01版, 此后几经修改, 到2003年4月发布了最新的cap0.4版。
2.3 WinPcap
WinPcap是由意大利人Fulvio Risso和Loris Degioanni等人提出并实现的。它从UNIX下的Libpcap库移植而来,用于用户层次的数据包捕获工作,由一系列开源的网络数据包捕获函数构成,为底层网络监控变成提供了一个易于移植的应用框架[5]。
2.3.1 WinPcap的体系结构[6]
WinPcap的基本结构如图3所示.它由内核级的网络组包过滤器(Netgroup Packet Filter,NPF)、用户级的动态链接库Packet.dll和wpcap.dll等三个模块组成。
图3 Winpcap的主要组成
(1)网络组包过滤器
它是运行于操作系统内核中的驱动程序,它直接与网卡驱动程序进行互交,获取在网络上传输的原始数据包。NPF与操作系统有关,WinPcap开发组针对不
同的Windows操作系统提供了不同版本的NPF。在Win95/98/ME系统中,它以VXD文件形式存在。该模块提供了抓取数据包以及发送数据包的基本功能,此外还提供了一些高级功能,如数据包过滤系统和检测引擎。
(2)低级动态链接库。
Packet.dll用于在Win32平台上为数据包驱动程序提供一个公共的接口。不同的Windows版本在用户态和内核态之间提供互不相同的接口,而Packet.dll可以屏蔽这些接口区别,提供一个与系统无关的API。基于Packet.dll开发包的数据包截获可以运行于不同的Win32平台而不必重新进行编译。Packet.dll可以执行如获取适配器名称、动态驱动器加载以及获得主机掩码及以太网冲突数等低级操作。
(3)高级动态链接库。
Wpcap.dll模块与Unix系统下的BSD截获框架提供的Libpcap库完全兼容。它提供了一组功能强大切跨平台的函数,利用这些函数,可以不去关心适配器和操作系统的类型。Wpcap.dll含有诸如产生过滤器、定义用户级换种以及包注入等高级功能。编程人员既可以使用包含在Packet.dll中的低级函数直接进入内核级调用,也可以使用由Wpcap.dll提供的高级函数调用,这样功能更强,使用也更为方便。Wpcap.dll的函数调用会自动调用Packet.dll中的低级函数,并且可能被转换成若干个NPF系统调用。
基于WinPcap的网络数据系统实验方案具有结构简单、捕获数据快、协议识别率高等特点,它的三个模块相互套用,实现了网络数据获取的基本功能[7]。
WinPcap提供两级缓存机制[8],分别是内核级缓存和用户级缓存。NPF捕获到的数据报文首先在内核中缓存下来,等到缓存满或超时后再一起拷贝到用户级缓存,以减少CPU在内核级和用户级之间进行上下文切换的次数,提高效率。同时,WinPcap提供设置内核级缓存和用户级缓存的API函数,以满足不同应用的需求。
2.3.2 WinPcap的功能
总体上来说,WinPcap能实现如下四项功能[4]: 利用WinPcap技术实现数据包的捕获和分析(4):http://www.youerw.com/jisuanji/lunwen_6750.html