WinPcap网络分析的体系结构

上传人:s9****2 文档编号:470614833 上传时间:2023-03-05 格式:DOCX 页数:8 大小:167.46KB
返回 下载 相关 举报
WinPcap网络分析的体系结构_第1页
第1页 / 共8页
WinPcap网络分析的体系结构_第2页
第2页 / 共8页
WinPcap网络分析的体系结构_第3页
第3页 / 共8页
WinPcap网络分析的体系结构_第4页
第4页 / 共8页
WinPcap网络分析的体系结构_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《WinPcap网络分析的体系结构》由会员分享,可在线阅读,更多相关《WinPcap网络分析的体系结构(8页珍藏版)》请在金锄头文库上搜索。

1、WinPcap网络分析的体系结构方松茂李祥(贵州大学计算机软件与理论研究所贵阳550025)摘要:WinPcap是一个包含了一套与libpcap兼容的捕获网络数据包的函数库,在各种不同的网络分析工具、故障工具、安全工具和监听工具开发中被广泛使用;本文首先介绍WinPcap,分析其体现结构,并通过捕获、发送网络数据包实例说明该函数库的使用方法。关键词:WinPcap,LibPcap,结构体系,网络分析WinPcap是一个包含了一套与libpcap兼容的捕获数据包的函数库。这套函数库是由加州大学和LawrenceBerkeley实验室及其投稿者联合开发的。他们在1999年3月31日推出了1.0版,

2、提供了用户级BPF过滤;1999年8月21日推出了2.0版,将BPF过滤增加到内核中并增加了内核缓存;2001年3月15日推出了2.1版,该版对libpcapO.5.2进行了升级,并可支持更多的网络类型;2001年1月30日推出了2.2版;2002年3月28日推出了2.3版;2003年1月10日推出了最新的3.0版,增加了NPF设备驱动的一些新的特性及优化方案、在wpcap.dll中增加了一些函数等等功能。1带内核驱动模式的WinPcap及其功能进行网络分析的应用程序依赖于一套适当的指令来捕获网络中的数据包,监听网络等等。几乎所有的Unix系统版本都含有至少是支持捕获分组的内核模块。在Wind

3、ows中有一些API有自己的内核模块,然而它们都有一些局限。例如,NetmonAPI不是免费的,其扩展性很有限,而且它不允许发数据包。IP过滤驱动程序只在Windows2000上有效,它除了IP协议外不支持任何其他协议。它允许操作或丢弃数据包但不允许监听和产生数据包。PCAUSA11是一套商业化的产品,它提供一个捕获包的接口及兼容BPF的过滤器。然而,用户的接口都很底层,没有提供类似于产生过滤器的抽象函数。WinPcap是一个在Windows操作系统下的免费的、公开的用于直接访问网络的系统。大多数网络应用程序都是通过被广泛使用的系统原函数(如套接字)来访问网络。这种方法允许在网络上进行简单的数

4、据传送,因为OS处理底层细节(协议操作、流程重组等等),并提供一个类似于读写文件的函数接口。WinPcap包含了一个最优化的内核模式驱动称作NetgroupPacketFilter(NPF),和一套与libpcap兼容的用户级函数库。WinPcap使Unix平台下的应用程序能方便的与Win32平台下程序联系,并且它能使一套很大的函数库只需通过简单的重新编译就立刻在Win32平台下使用。而且,由于网络监听的重要性,WinPcap还为此提供了特殊的系统调用函数。WinPcap有以下功能:(1)捕获原始数据包,捕获包括发送到正在运行的主机上的数据包和在其它主机在共享媒介上交换的数据包。(2)过滤器在

5、将数据包发送给应用程序之前按用户规定对捕获的数据包进行过滤。(3)向网络发送原始数据包。(4)对网络通信进行统计。WinPcap能够被各种不同的网络分析工具、发现并修理故障工具、安全工具和监听工具使用。依赖于WinPcap的典型工具有:网络和协议分析软件;网络监听软件;网络通信量记录软件;网络数据生成软件;用户机网桥和路由器;网络入侵探测系统;网络扫描软件;网络安全工具。WinPcap可以独立于主机的协议(如TCP-IP协议)进行接收和发送数据包。这意味着WinPcap不能阻塞、过滤或处理本机上其它程序产生的数据:它仅仅能嗅探在网线上传输的数据包。因此,WinPcap不能在trafficsha

6、pers、QoSschedulers和个人防火墙这类应用程序中使用。鉴于WinPcap的强大功能,因而受到了广泛的使用。国内外众多的网络安全软件都使用了这个函数库进行开发,并取得了良好的效果。2WinPcap的结构体系首先介绍BSD捕获包体系结构(如图1)。BerkeleyPacketFilter(BPF)2是捕获包的内核部分,它还被看作是可以通过接口驱动与网络接口联系的设备驱动程序。BPF由以下部分构成:1.NetworkTap3是一个用于探听网络中所有数据流的函数;2.Filter是一个过滤器,用于分析所监听到的用户感兴趣的包(用户可将过滤器设置为只接收网络中某一类数据包子集)。如果一个包

7、符合过滤器的要求,就被复制到内核缓冲区(Kernelbuffers)中(这个缓冲区被细分为两小部分,用来将捕获的数据包保存一段时间)。这些内存通常在捕获进程的一开始动态分配:第一块缓冲区(store)一般是保存网络适配器传来的数据,第二块缓冲区(hold)是将数据包复制到用户的缓冲区中。当store缓冲区满了而hold缓冲区仍是空的时,BPF会将它们两个交换。图1.基于BSD系统的监听程序结构程序员主要关心Libpcap部分,因为它将应用程序与OS内核之间的相互作用隐藏起来,提供了一套与用户程序联系的函数和强大的捕获数据包的抽象接口,包括过滤器产生器、用户缓冲区管理(这对应用程序是不可见的)等

8、;用户缓冲区通常存放来至于内核的数据包并阻止应用程序访问内核管理的内存。Libpcap提供的函数只能捕获数据包,不允许发送数据包或监听网络。实践证明BPF是一个非常强大、稳定的结构体系,因此WinPcap的基本结构(如图2)中保留了BSD的最重要的模块:过滤器,两个缓冲区(内核和用户的)和一套用户级的函数库。然而,WinPcap在结构和捕获堆栈的行为上与BPF有巨大的不同,这些可以看作是BPF的改进。过滤进程由能够接收用户定义过滤器(例如:捕获所有的UDP包)的用户级组件调用开始,并将其编译成一组伪指令(例如:如果是IP包,协议类型参数等于17,就返回true值),并发送到过滤器去运行。一方面

9、,内核模式必须能执行这些指令;因此它必须有一个可以执行所有捕获的包的伪代码BPF虚拟机。这个内核中兼容BPF的过滤器是获得良好性能的关键。BPF与NPF之间在结构体系上最显著的不同之处是:选择循环缓冲区做内核缓冲区的不同。循环缓冲区已被优化成一次可以复制多个数据包。因为复制的数据不再是固定大小(libpcap管理的内核缓冲区与用户定义的缓冲区大小一样,32KB),还因为所统计的复制字节总数被更新为当数据从内核缓冲传到用户定义缓冲时的字节数,而不是之后的字节数,所以这种机制更难被管理。实际上,由于内核的捕获包这部分缓冲可能会影响已经传递数据的缓冲区(因为它有较高的优先级,会独占所有的CPU时间)

10、,所以复制过程释放了这一部分缓冲。我们控制缓冲区的指令允许所有的内存储存网络中的数据,而一对交换缓冲区只允许是用一半的内存。整个内核缓冲区通常通过read()方法被复制,这样减少了系统调用和用户与内核之间环境转换的次数。由于环境转换要保存任务状态(CPU描述符和任务状态部分大概占几百个字节),大量的数据传递减少了系统的开销。然而用户定义的缓冲区过大也会带来不利影响,因为环境转换的系统开销会变得忽略不记,而分配内存的系统开销会呈线性增长。WinPcap内核缓冲区(默认为1MB)比BPF要大。一个小的缓冲区不利于捕获包的进程,特别在应用程序不能在限制的时间间隔内以与驱动捕获包相同的速度度去读数据时

11、。这种情况在数据必须写到磁盘上或网络繁忙时很常见。反之,定义的缓冲区比较小,其默认值为256KB。内核和用户的缓冲区都可以在运行时改变(pcap_setbuff()函数允许用户定义内和缓冲区的大小。BSD允许用sysctldebug.bpf_bufsize外壳命令改变缓冲区大小。然而libpcap覆盖了这些设置,把内核缓冲区固定设置为32Kbyte。)。用户定义的缓冲区大小是非常重要的,因为它决定了在一次系统调用中,从内核内存复制到用户内存的最大数据量。同时,我们也注意到一次调用中能复制的最小数据量也非常的重要。当给用户定义的缓冲区设置较大的值时,内核会在接收到几个包后再把数据复制给用户。这样

12、保证了系统减少调用次数,例如,对象嗅探器这类的应用程序,应该设置为对CPU占用率较低。另一方面,将缓冲区设置成较小的值,能使内核一接收到包就马上复制给应用程序。这对那些需要内核有较好回应的实时应用程序来说很有利。现有的大多数捕获包驱动都有特许这两者之一的静态方法。另外,NPF是完全可配置的,它允许用户选择最有效的操作或是最快回应操作。WinPcap包含了两个系统调用函数,可以用来设置超时时间和可传递给应用程序的最小数据量,这样当满足最小数据量时或到达超时时间时数据包就被复制给应用程序。默认超时时间为1秒,最小数据量为16K。这种能力一般称作“定时写操作”通常,由于系统开销的原因,内存复制都必须

13、设为最低。WinPcap同样可以初始libcpap/BPF的系统开销,并且数据包会复制两次(从网卡驱动复制到内核,在从内核复制到用户缓冲区中)。而且当网络驱动中仍存有数据包时,过滤器就会运行,因此要避免复制任何类似于BSDbpf_tap()函数产生的没构造的数据包。3用WinPcap捕获与发送数据包3.1 统计模式由于有大量的数据要处理、复制,因此捕获包和网络分析会占用较多的CPU。我们的试验将说明在FastEthernet局域网上对捕获少量数据包的简单操作能明显影响工作站的CPU能力。这阻止了在没有丢弃大量数据包的情况下进行任何对捕获数据的实时操作。这种情况在更高速的网络中显然更糟糕,因为它

14、需要专门的硬件来捕获数据包。最著名的提高速度的方法包括:提高过滤器引擎789和l-copy体系结构。这些避免了通过将内核缓冲区映射到应用程序内存中10的方式把数据在内核缓冲与用户缓冲之间复制。然而,1-copy处理能减少要复制的数据量但不能减少用户和内核模式之间系统调用的次数。如果用户一次读取一个数据包,系统调用次数(如:环境转换次数)仍然较高,而且不能体现共享缓冲区的好处。请记住还有一个办法,不必将数据包传递给应用程序就能进行监听。WinPcap将监听功能移到内核中,这样避免了将任何数据都传递给用户。WinPcap还通过使用从NPF中得到的过滤器来执行一个内核级的可编统计模块,这使其变成一个

15、强大的分级引擎,而不只是个简单的包过滤器。应用程序可以构造这个模块来监听网络活动的任意方面(例如:网络负荷、两台主机间的流量、每秒web请求的次数等等),并在预定的时间间隔内接收内核传来的数据。统计模式避免了复制数据包并且执行0-copy机制(当包仍存放在NIC(网络接口卡)驱动的内存中时开始进行统计,随后丢弃这个包)。而且,环境转换的次数可以保持最低,这是因为结果通过一次系统调用就可以返回给用户。它不需要缓冲区(内核或用户),因此当监听开始时不用为它分配内存。可见,统计模式是一种很有效的网络监听方式,在高速网络中利用libpcap来工作也没任何问题。WinPcap为程序员提供了一套系统调用和

16、高层函数来进行网络监听,这使得已经知道libpcapAPI的程序员能很容易使用。3.2构造数据包BPF和NPF都提供了构造包的函数,使用户可以将原始数据包发送到网络中。然而libpcap不用这些函数,为此BPF也不被使用。在Unix平台上,应用程序一般使用原始套接字来发送数据包。而Win32只在Windows2000中提供了原始套接字,而且非常的有限。因此对所有的Win32操作平台来说,WinPcap可作为首选的构造数据包的函数库,它提供了一套标准稳定的函数。另外,NPF增加了一些新的函数,这些函数可以使数据包通过一次用户和内核模式之间的转换就发送几次。数据复制到内核中,然后通过调用一次NDIS将包发送到网络中。WinPcap提供了一套新的函数来开发这些特性,但它没有提供那些强大的创建数据包的抽象函数,这需要通过其它现有的工具来实现。但程序员可以利用著名的LibnetPacketAsse

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号