首页 > 范文大全 > 正文

伯克利数据包过滤器的探索与研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇伯克利数据包过滤器的探索与研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:伯克利数据包过滤器BPF(Berkeley Packet Filter)是一个工作在操作系统内核的数据包捕获机制,它先捕获链路层的数据包而后再过滤,最后将特定的过滤后的数据包提供给应用层。文章介绍了数据包截获技术的分类,详细分析了伯克利数据包信息过滤技术和截获数据的途径。

关键词:过滤器;BPF;数据包截获

引言

1993年,Steven McCanne与Van Jacobson在Usenix'93会议上提出的一种使用Unix内核的数据包截获过滤机制-伯克利包过滤(Berkeley Packet Filter,BPF)。BPF是一个工作在操作系统内核的数据包捕获机制,它先捕获链路层的数据包而后再过滤,最后将特定的过滤后的数据包提供给应用层。伯克利数据包过滤器大大提高系统运行的性能。在设计体制上,伯克利数据包过滤器有两个改进:第一使用了一种新型的基于寄存器的“过滤虚拟机”,它可以高效的在基于寄存器的RISC处理器上进行包过滤。第二伯克利数据包过滤器使用了一种可以为每个单独的进程提供服务的非共享缓存模型,该模型使系统性能得到很大提高。

伯克利数据包过滤器由Unix系统内核实现,由以下两大部分组成:网络接口和数据包过滤器。网络接口主要通过网络驱动程序从网卡上获取流经网卡的所有数据包,然后把数据包分发给正在等待的系统进程。为防止无用的数据包被调进用户空间,通过用户定义的相应规则,数据包过滤器丢弃没用的数据包。包过滤器将有效的数据包缓存,等待它被用户程序调用。

1 数据包截获技术的分类

入侵检测最重要的工作就是网络数据包的截获。它具有多面性,一方面黑客可以利用它刺探网络的传输数据,另一方面网络管理员可以用来监听网络的流量情况,同时网络开发的程序员可以用它来实现网络的应用程序。现在有许多免费的和商业性质的网络监听工具,这类工具又叫网络嗅探器(sniffer)。通过嗅探器可以截获并分析网络上的数据。其中libpcap和BPF就是有名的嗅探器函数库。

截获网络数据有以下两种方法:一是通过设置路由器的监听端口或镜像端口,二是利用以太网络的广播特性来实现。以太网传输网络数据帧采用CSMA/CD(载波侦听/冲突检测)的技术。载波侦听的工作原理是:网络中的每个主机都是平等的。传输数据时,先要监听检测信道的状态。如果是空闲状态,就将数据传输出去,如果信道忙碌,则等待信道空闲再传输。当两个主机同时检测到网络空闲则使用冲突检测技术。在载波侦听/冲突检测模式下,以太网采用广播机制传输数据帧,同一网段上的主机彼此透明,可以看到该网段上所有传输的数据帧,完成所有网络包的分析和截获。

2 BPF的信息过滤技术

BPF实现数据包过滤具体步骤是:首先网络设备驱动程序收集网络数据包,交由过滤器处理,然后过滤器过滤该数据包。BPF模型将其实现为BPF虚拟机,通过在BPF虚拟机上执行过滤程序,过滤器决定是否捕获数据包,如果捕获,则捕获该数据包的哪些部分。当过滤器过滤完数据包后,将数据提交给过滤器关联的上层应用程序。接下来控制权由链路层设备驱动程序重新获得,把过滤后的网络数据包提交给上层的系统协议栈处理。

引入了数据包过滤机制后,网络上的每个数据包都会被系统过滤,根据该数据包是否满足过滤条件,判定是否接收该数据包和接收该数据包的哪些部分,然后复制数据包中的相应内容。但是,引入包过滤机制增加了系统处理数据包的时间。网络监听的关键是过滤的性能,低效率的过滤程序将引起丢失数据包以及来不及分析等问题。

3 BPF截获数据的途径

在网络上截获数据的途径主要依赖于所使用的操作系统,操作系统不同一般都有不同的实现途径。在Linux或UNIX操作系统中,通常采用API函数库Libpcap来实现,该函数库由美国洛伦兹伯克利国家实验室所编写,具有专用于数据包捕获的功能。Libpcap实质上是一个系统独立的API函数接口,用于用户层次的数据截获工作,Libpcap接口支持基于BSD的数据包过滤器(BPF,Berkeley Packet Fliter)的数据过滤机制。

目前,许多版本UNIX和Linux平台上多数嗅探器都是基于BPF开发的。这主要是因为监听程序以用户级别进程工作,数据包的拷贝必须跨越内核/用户保护界限,这就需要使用名为数据包过滤器(Packet Fliter)的内核程序。BPF过滤使用了新的基于寄存器的预过滤机制,它的缓存机制也对整体效率提高有很大作用。

BPF主要是由两部分构成的,一是网络转发部分,二是数据包过滤部分。网络转发部分从链路层中捕获数据包,并把它们抓发给数据报过滤部分。数据报过滤部分从接收到数据报中接受过滤规则决定接受网络数据报,其他数据包就会被抛弃。BPF的这两个部分都是在操作系统内核层实现的,它提供给应用层的数据包是过滤后的数据包,所以捕获数据包和过滤数据包的过程都是在内核中完成的,它的效率是很高的。

BPF在核心设置了过滤器,预先可对数据包进行过滤,并且只将用户需要的数据提交给用户进程,如图1所示。每个BPF都有一个Buffer,如果过滤器判断接收某个包,BPF就将它复制到相应的Buffer中暂存起来,等收集到足够的数据后再一起提交给用户进程,提高了效率。

图1 BPF的模型及其接口

BPF技术不断改进,在2007年,Robert Watson与Christian Peron为FreeBSD操作系统中BPF的实现加入了zero-copy buffer extension,使得驱动程序中断处理器中的内核封包抓取能直接向用户内存写,以避免BPF设备收到的所有封包数据的两次复制需要,一份副本存在于用户进程的接收路径中,这保证了不同BPF设备调用者的独立性,同时使得只把封包头部放入BPF缓冲区,而不是复制整个封包数据。

参考文献

[1]吴众欣,李兰友.基于BPF模型的分布式网络信息监听系统[J].天津工业大学学报,2002(1).

[2]曾鸣,赵荣彩.BPF的实现机制分析与性能优化研究[J].计算机工程,2007(12).

[3]夏欣.基于BPF的数据过滤机制研究[J].科学技术与工程,2008(23).

[4]庄春兴,杨晓伟,黄向前.网络数据包的捕获、分析与应用[J].计算机应用与软件,2003(11).

作者简介:杨铭(1982-),女,吉林长春人,吉林电子信息职业技术学院讲师,研究方向:计算机科学与技术。