windows下基于bpf模型的网络数据包截获模块的设计与实现

windows下基于bpf模型的网络数据包截获模块的设计与实现

ID:9302580

大小:97.50 KB

页数:8页

时间:2018-04-27

windows下基于bpf模型的网络数据包截获模块的设计与实现_第1页
windows下基于bpf模型的网络数据包截获模块的设计与实现_第2页
windows下基于bpf模型的网络数据包截获模块的设计与实现_第3页
windows下基于bpf模型的网络数据包截获模块的设计与实现_第4页
windows下基于bpf模型的网络数据包截获模块的设计与实现_第5页
资源描述:

《windows下基于bpf模型的网络数据包截获模块的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、采用WinPcap库的sniffer的通用设计(编程)模型1.WinPcap概述WinPcap是PolitecnicodiTorino的NetGroup开发的基于Win32平台的包捕获和网络分析的基础构架,由UNIX下的libpcap库移植而来,用于用户层次的数据包截获工作。它为底层网络监控编程提供了一个易于移植的应用框架。WinPcap库和Libpcap一样,采用内核过滤机制,并且只支持BPF(Berkeley分帧过滤器)接口的内核过滤。如果主机上没有BPF机制.则所有的效据包都必须读取到用户空间后,再在WinPcap库中进行过滤处理,这样就会增加额外的处理负担,导

2、致性能的下降。2.BPF包过滤机制BPF于1992年被设计出来,其设计目的主要是解决当时已存在的过滤机制效率低下的问题。BPF的工作步骤如下:当一个数据包到达网络接口时,数据链路层的驱动首先调用BPF进行过滤操作,然后把数据包存放在过滤器相关的缓冲区中,最后设备驱动再次获得控制,避免了类似sun的NIT过滤机制先缓冲每个数据包直到用户读数据时再过滤所造成的效率问题。相对老式的过滤方式CSPF(CMU/StanfordPacketFilter)有两大特点:一是基于寄存器的过滤机制和而不是早期内存堆栈过滤机制;二是直接使用独立的、非共享的内存缓冲区,这大大提高数据包捕获的

3、性能。BPF在过滤算法上也有很大进步,它使用无环控制流图(CFGcontrolflowgraph),而不是老式的布尔表达式树(booleanexpressiontree),其优点在于把对数据包的分析信息直接建立在图中,从而不需要重复计算。BPF由两个组件组成:BPF网络阀和数据包过滤器Filter。通常在数据报到达网络适配器时,设备驱动程序会将数据报传递给协议栈的其它部分。网络阀是个回调函数,从网络设备驱动程序处收集数据,并将它们传递给正在监听的应用程序。收集的数据报若满足Filter的条件,那么将它们保存在缓冲区内,在应用程序读取时,将它们拷贝到用户层的缓冲区中。F

4、ilterr是返回值为Bool类型的函数,用来判断是否将收集到的数据报拷贝到应用程序的缓冲区内。若数据报满足Filter所设置的条件,那么它返回真并且将它传递给应用程序;否则将它抛弃掉。BPF结构如图1所示。3.WinPcap网络数据捕获体系Winpcap为应用程序提供了与数据包截获有关的过程,包括两个不同层次的API:packet.dll,wpcap.dll和一个虚拟设备驱动程序npf.vxd,应用程序可以调用底层的API也就是packet.dl,也可以调用高层的APIwpcap.dl来实现各种高级的应用。在这三个组件中,Npf.vxd工作在内核级,与操作系统和硬件

5、是相关的。packet.dll和wpcap.dll工作于用户级,与具体的硬件无关,其中packet.dll属于底层的API,与操作系统是相关的,在Win9x(95,98,me)和WinNT(NT4,2000,XP)系列中有所不同。Wpcap.dll是高层的API,他是与操作系统无关的。由于这两个API的级别不同,因此基于packet.dll和wpcap.dll编写的应用程序各有其不同的优点,前者能够直接访问到驱动程序,便于实现一些底层的功能,而后者与Unix系统中使用的libpcap兼容,所以基于他所编写的程序在windows系统和Unix系统中都可以运行:Appli

6、cationUserLevelKernelLevelNetworkPacketsWinpcap.dlluser-bufferLibpcapLibraryKernelBufferfilterNetworkTapNICDriverPacketCaptureDriver图2WinPcap网络数据捕获体系3.1WinPcap主要接口介绍(1)typedefvoid(*pcap_handler)(u_char*user,conststructpcap_pkthdr*pkt_header,constu_char*pkt_data).回调函数的原型.(2)pcap_open_liv

7、e().用来获得一十数据截获描述符,读描述符用于查看在同鳍上传输的敷据包;(3)pcap_dispatch().获取网络数据包,调用参数中指定的pcap_handler函数对数据包进行处理,并根据设定的条件返回.(4)pcap_compile():来编译一个过滤设备,它通过一个高层的boolean型变量和字串产生一系列的能够被底层驱动所解释的二进制编码。(5)pcap_setfilter():用来联系一个在内核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中。(6)voidpcap_close(pcap_t*p).关闭相关的文

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。