Libpcap的BPF过滤器的分析

2015-07-27 07:38江西科技师范大学理工学院南昌330013
山东工业技术 2015年19期
关键词:过滤器

刘 琦(江西科技师范大学理工学院,南昌 330013)

Libpcap的BPF过滤器的分析

刘琦
(江西科技师范大学理工学院,南昌330013)

摘要:本文分析与研究了Libpcap的BPF过滤器的过滤本质,首先,分析了BPF过滤器在Linux内核中的位置和结构;其次,详细分析了BPF过滤器怎样处理高层语言表示的过滤器;最后,设置一个高层语言表示的过滤器,利用BPF过滤器捕获满足要求的网络数据包。

关键词:BPF;Libpcap;过滤器;网络数据包

0 序言

现代网络时代中进行大数据网络监控程序是具有其各自目的前提,我们所期望网络的数据中包类型都是不尽相同的。应该在绝大多数的情况之下都需要不一样网络数据包中的一部分甚至一大部分。

1 BPF在Linux内核中的位置和结构

我们说的BPF一般意义上由两大部分组成的:网络分接头、数据包形成口和过滤器暂借口几个部分。趋于网络钟的分接头最主要是从网络新型设备部分和驱动应用驱动程序处的疏密收集数据包中拷贝开始实现的,并不断地先后传递给其中在监听中运行的各种各样的有机应用程序。狭义上的过滤器的决定数目的数据包不仅仅是被接受也可能是直接拒绝的,而且又是根据本身所发生的不断变化和形象的转运体而实现出来的一种传递信息的符号。

当其中的不断产生的大数据包接近或者已经到达网络各个设备需要的复杂接口设备时,这期间所发生的简介的链路层和设计设备驱动器就通常就把它传递给我们所需系统协议栈进行有效实质性预处理模式。但是BPF又会在该网络接口上监上听取时,这样有效的实施驱动器将会能够先调用到BPF中间进行有效处理,有了BPF就会将数据包传递不段的传递给其中每个监控进程运行中的过滤器。使得这些用户得到自定义过滤器后就一定会发生变化,然后自觉将决定数据包是否被接受,以及到达的各种数据包中哪些内容是否应该被保存下来处理。对于其中的每一个决定是否接受数据包的各种过滤器系统,BPF还会将需求的数据包不断的输入拷贝到他们与之相连的形势短针轨道缓存之中去。

2 BPF处理高层语言表示的过滤器

一个用高层语言(例如:C语言学习和C++语言学习运用中)表示使用新型的过滤器的结构组成差别部分,有效的实行被编译和优化成BPF各种虚拟机运行中的字节码虚拟运行部分。这种有效的字节码会不断的跟随和接着经过保护边界的地方,现在有效的检查代码和有效的合法性生产部门,后面的接着会在线解释并发出指令去执行。BPF系统发生后会根据处理器的形成购置也就是包括一系列有效组件规律性质把用过高层语言表示的过滤器不断逐步的转换为可视的底层可执行的输入设备管理器来使用。

那么我们形成最有效的无虚拟性前段前端输入是一个中低层语言表示形成轨迹过滤器,它是被最初Libpcap使用的机器语言中公开的谓词语法等。

BPF编译器把该过滤器转换为一些命令,用一个SSA中间形式的控制流程图表示。

SSA中间形式的控制流程图通过代码优化器执行全局的与局部的数据优化器,优化器的输出为一个与BPF虚拟机一致的字节码。

BPF字节码接着被传递到一个可执行的环境中,比如穿过用户层-内核层的保护边界去执行用户定义的协议分析。

当进入目标保护区域,安全确认机制就认为该字节码是可信的。

接着在BPF内核解释执行过滤器的字节码。

3 虚拟机指令的生成

现代化生产环境下的BPF中虚拟机指令生成的有效结构被分成编译器、优行器两个并列产生独立的适用性组成部分。最先是编译器译码器会将高层语言表示的过滤器不断的转化为无环控制系统流图的CFG有效部分,然后其再将此控制流图有效的图形不断的转化为符合运行适应的SSA中间处理器表示形式控制流图指令接受的一种完整的过滤形势,最后会发生优化器会总的负责对SSA形式控制流图不断的进行优化使用部分,并生成最终虚拟机指令流派系列过度性语言,这也是虚拟机和指令语言中间的生产字节码语言所在。

4 BPF中的CFG

BPF(BerkeleyPacketFilter-BPF)是McCanne和VanJacobson在1993公布的Berkeley网络数据包过滤器。BPF是对CSPF的改进过滤过程是从一个用户所定义的过滤器(比如:捕获起所有的TCP数据包)开始,首先应用程序调用Libpcap源码中的gencode.c文件中的pcap_compile()函数来编译过滤器,通过该函数生成所需的虚拟机中间字节码。然后应用程序调用Libpcap源码中的pcap.c文件中的pcap_setfilter()函数将一个过滤器与一个捕获实例相关联,把过滤器的字节码传递给内核的BPF驱动程序中,当进行数据捕获时,驱动程序执行该过滤器对来自网络的所有数据包进行过滤,所有符合要求的数据包将会复制给应用程序,否则丢弃该数据包。

BPF的设计思想和当时的计算机硬件的发展有很大的联系,在过滤算法上,CSPF使用的是老式的布尔表达式树(Booleanexpression tree),BPF使用的是无环控制流图(controlflowgraph,CFG),这样大大提高了过滤网络数据包的效率。

假设我们的过滤器是ip or arp,CSPF和BPF的过滤算法如图1和图2。

图1

图2

从我们的上图就可以得出结论:利用设置了过滤器的BPF过滤器在Linux系统网络应用程序进行数据链路层MAC帧的捕获,捕获到了满足要求的SourceIPAddress是192.168.1.6的网络数据包。进一步证明了分析和研究BPF过滤器的重要性和必要性。从而可以大大提高我们捕获网络数据包的效率。

参考文献:

[1]刘文涛.网络安全开发包详解[M].北京:电子工业出版社,2005.

[2]唐正军.黑客入侵防护系统源代码分析[M].北京:机械工业出版社,2002.

猜你喜欢
过滤器
高中效过滤器对细颗粒物过滤及容尘性能研究
燃气过滤器滤网流阻特性及压差评价
Hold FAST,aliens aren't invading
三步拆卸洋马YH880/1180 收割机变速箱内过滤器
F 级中效过滤器对细颗粒物过滤及容尘性能研究
某工程送风厂房送风系统预过滤器改进
提高中央空调高效过滤器使用寿命的几点思考
污染控制—燃料电池的使能技术
针对石化行业过滤器流阻的探讨及研究
花粉过滤器