,欢迎光临!
加入收藏设为首页请您留言
您当前位置:网站首页 >> 西北地区 >> BPF数据包过滤器的分析与研究-上海联兵环保免费电话:400-600-5030

BPF数据包过滤器的分析与研究-上海联兵环保免费电话:400-600-5030

2011-09-14 08:51:50 来源:中国过滤器网 浏览:1

摘要:随着网络的迅速发展,信息量的增大,大量的无效数据降低了网络监控的效率,对网络数据包的捕获和过滤变得尤为必要了。BPF数据包过滤器以其简洁的结构在计算机内核中对数据报进行第1层过滤,减轻了用户层工作的负担并且提高了抓包率。研究了BPF的工作原理和过滤模型并且提出了在Windows系统下如何运用BPF过滤器开发包过滤系统。BPF数据包过滤器在网络监控方面有巨大的研究和使用价值。
关键词:BPF;网络监控;过滤器模型
中图法分类号:TP393.06文献标识码:A文章编号:1000-7024(2005)09-2384-02
1 引言
随着网络的普及,安全问题正威胁着每一个网络用户。一旦安全问题发生通常会带来严重的后果。对计算机的网络监控便变得很必要了,而其中最重要的一部分便是对网络数据包的捕获过滤和分析。
BPF(Berkeley Packet Filter),即伯克利数据包过滤器提出的背景是当时在UNIX的网络功能使用中出现了对网络监控工具的强烈要求,以便用来分析和排除网络故障。但是大多数网络监控工具运行在用户态空间,数据包必须从内核拷贝到用户空间,重复的拷贝工作影响效率和速度,特别是对分析某种网络数据时因为来不及处理导致丢包率相当严重。BPF过滤器是基于内核的一个代理进程,是用来丢弃那些不需要的数据包,接受需要的数据包。
2 数据包捕获模型
当网卡收到一个有效的数据包后,网卡向系统总线控制器请求总线控制权以传输数据。这时,网卡获得总线控制权并向工作站主存传输网卡缓冲区的数据(如图1),释放总线后,网卡向高级程序中断控制器芯片(AdvancedProgrammableInter-rupt Controller)生成硬件中断。APIC接着唤醒操作系统中断处理程序,进而触发NIC设备驱动器的中断服务程序(InterruptService Routine)。高效设备驱动的中断服务程序(ISR)将完成其份内职责。最基本的,如它会检测与本设备相关的中断(由于在x86机器中允许多个设备共享同一个中断)并给予确认。然后,ISR预置一个低优先级的函数(称作DeferredProcedureCall),它会在收到数据包后处理硬件请求并通报上层驱动(即协议层驱动或包截获驱动等)。在完成所有等待队列中的中断请求任务后,CPU启动DPC程序。由于一次只能处理一个数据包,故网卡设备驱动处理数据包时,源于网卡的中断将会被暂时禁用。另外,中断产生是一个很耗系统资源的过程,现在新型的网卡允许在一次中断中传输一个以上的数据包,使得上层驱动程序在被激活时有能力同时处理若干个数据包。
数据包捕获部件类似于协议栈,通常透明于其它软件模块,这将不影响标准系统的工作,在win32系统上,包捕获部件通常以网络协议驱动的形式被实现。在数据包还处于网卡缓冲区时便对数据包进行过滤,提取用户感兴趣的数据包传递到应用层。如图1表示捕获驱动的工作示意。

3 BPF的工作原理
BPF主要由两大部份组成:网络分接头和数据包过滤器。网络分接头主要从网络设备驱动程序处收集数据包拷贝,并传递给正在监听的应用程序。过滤器决定数据包是否被接受或拒绝。图2给出BPF与操作系统其它部分的接口关系。

当数据包到达网络接口设备时,链路层设备驱动器通常把它们传送给系统协议堆栈进行处理。但是,当BPF也在该网络接口上监听时,驱动器将会首先调用BPF。BPF会将数据包传递给每个监控进程的过滤器。这些用户自定义的过滤器将决定数据包是否被接受,以及数据包中的哪些内容应该被保存下来。对于每一个决定接受数据包的过滤器,BPF将所需的数据包拷贝到与之相连的缓存中。然后设备驱动程序重新获得控制权。此时,如果数据包的目的地址不是本机地址,则驱动程序从中断过程返回。否则,将进行正常的网络协议处理过程。
4 BPF的过滤器模型
网络监听应用可能只关心网络流量数据的一个子集,因此包的过滤将大大提高系统的性能.为了减少内存操作,以尽量避开瓶颈,包过滤应该在包的原始位置(in2p lace,即DMA操作存放数据的内存位置)进行过滤,而不是首先拷贝数据。
一个数据包过滤器实际上是一个关于数据包的逻辑值类型的函数。如果函数返回值为TRUE,则内核传送数据包拷贝;如果为FALSE,则数据包被忽率。
数据包过滤器有两种抽象模型:一种是布尔表达树,另一种是有向非循环的控制流程图。图3和图4表示两种模型的表示方法,该过滤器用来识别以太网中的IP或者ARP数据包。
图3为表达树模型,在树型模型中,每一节点代表一个布尔关系如AND和OR,每个叶子代表一个谓词断语,如type=IP,边表示布尔操作和操作数的关系。图4为CFG模型,在CFG模型中,每个节点代表一个谓词断语,而边代表控制转换。如果谓词断语为t rue则转向右边,反之转向左边.每个CFG图有2个终结节点,表示返回t rue或者false。

树型模型基于模型操作数堆栈运算,指令将常数或包数据压入堆栈,在堆栈顶层执行布尔运算或位运算,通过连续运算,在堆栈清空时返回结果.堆栈需要内存模拟,其中的POP和PUSH操作需要指针的加减运算将数据从内存读取和写入内存。对于内存存取已成为主要性能瓶颈的现在计算机而言,这种方式必将是低效的。另外树型结构可能进行重复操作,例如某个值可能在多个叶子中分别从内存读取并计算,因此这种方式效率较低.BPF采用CFG过滤模型而非过滤树模型.。
这是因为过滤树模型在解释包时可能进行重复计算,而CFG模型解释包时数据包的解释状态和路径是可记忆的,不需要重复计算。而且在CFG模型的实现中,过滤器主要使用寄存器的值,尽量避免读取内存,因而将大大提高效率。例如,采用CFG模型接受来自主机的所有数据包,包括IP,ARP和RARP包,在所有包中都需要查询地址,但不同包的格式是不一样的。采用树型模型时,为检查数据包是ARP还是RARP,需要7次比较操作和6次布尔操作,而采用CFG模型的最长路径只需要5次比较操作,平均只需要3次。
5 基于BPF模型的包捕获系统
BPF包捕获技术提供了基于内核的过滤和缓冲,在高速网络中可获得良好的性能。我们在具体实现数据包捕获系统时可以应用LibPcap开发包,该包支持基于BPF的数据过滤机制。Libpcap实质上是一个系统独立的API函数接口,用于用户层次的数据包截获工作。它为底层网络监控编程提供了易于移植的应用框架,这些底层的网络应用包括数据收集,安全监控和网络调试等。
Libpcap只支持BPF接口的内核过滤,如果没有BPF的支持,数据包将全被读入用户空间。运用LibPcap开发包提供的接口,我们可以设计简单的包捕获系统。图5为包捕获系统的结构图。

LibPcap包提供open()函数打开网络设备并且初始化设备,由用户自定义过滤规则,compile()函数将规则字符串转化为内核过滤程序;然后设定一个过滤程序setfilter()传给BPF,由BPF过滤器捕获用户所需要的数据包,最后关闭设备close()。
6结论
BPF具有高效.简洁等独到的优点,从而大大提高了包捕获的运行性能。我们可以设置各种不同的过滤规则来捕获我们所需要的数据包进行分析和研究,有助于对网络的优化和防止外来的入侵。

 

上海联兵环保科技有限公司
地址:上海市松江区工业区茸北分区茸阳路69号
总机:021-51691929
传真:021-57784244
免费电话:400-600-5030
技术支持:13641659499
E-mail:zhanglianbing@126.com
http://www.shlbhb.com

发表评论
网名:
评论:
验证:
共有0人对本文发表评论查看所有评论(网友评论仅供表达个人看法,并不表明本站同意其观点或证实其描述)
赞助商链接
关于我们 - 联系我们 - 咨询联兵