基于Netfilter的数据采集技术在实时内容过滤中的应用

 万方数据

6月孙鸿斌等:基于Nemlter的数据采集技术在实时内容过滤中的应用193

与内核模块间切换对数据包的处理权。在通过某个钩子点时,IP层会检查并调用注册在此点的内核模块函数。

图1中钩子点的名称,在系统协议栈中的定义位置,以及数据包通过的时机如表2。

表2钩子点在系统协议栈中的定义位置及通过时机

2内存映射技术

IJinux是一个具有保护模式的操作系统。内存被分为两个部分,内核空间和用户空间。内核空间存放并运行着核心代码,用户空间存放并运行用户程序。用户进程不能访问内核区域的地址空间,内核进程也不能访问用户进程的地址空间。要将在内核态下得到的原始数据交给用户态下的内容分析模块,需要利用内存映射技术建立用户态和核心态之间的接口。这样既减少了系统内核向用户空间的内存拷贝,同时减少了系统调用的开销。’内存映射的过程是:在内核态下申请一内核缓存,通过proc文件系统将该缓存的地址传给用户进程;用户进程通过读proc文件系统取得缓存地址并对该缓存进行地址映射,从而可以从其中读取数据。

下面为内存映射的具体实现过程。在内核态下申请一块空间,向其中写入一些测试字符串,用户态程序读共享缓冲区,将字符串输出。

1)在内核态下分配缓冲区

定义全局变量,来保存分配空间的首地址:

8taticun8i印edlongsul上;

分配空间:

8u1_2=——.get—fhe—page(GFP—KERNEL);

也可以使用一get_fjee—pages(GFP—KERNEL,Order)来分配多页地址,每页地址大小为4K,这里Order为2的指数。由于在unux2.4.x内核中支持的最大可分配连续缓存大小为2M,也就是Order大小为9,所以如果需要存储更大量的内容,则需要分配多块非连续的缓存,并使用链表、数组或hash表来对这些缓存进行管理。

常驻内存:

mem—map—Te8em(virtj虬page((ch盯母)sul-2));

向缓冲区内写入测试数据:

s扛cpy((ch盯})sul上,”mi8isKemel一D砒a!”);

2)使用proc文件传递内存首地址

proc文件系统是一个伪文件系统,它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。它的内容不存在于任何设备上,而是在读写的时候根据内核中有关信息动态生成出来的。它只存在内存当中,而不占用外存空间。

创建proc文件:

cre8te-pmc』ad一∞乜y(”itelll3”,O,NULL,item-read—proc,O);

该函数原型为:

inline8tn】ctpmc—dir-Pn缸y牛crcate—_pmc—mad—en缸y

(constchar牛name,modejmode,8缸uctproc—dil』nhy宰base,

read—pmcj}read—proc,void}da诅)

b鹊e指定在哪个目录下创建。mode为读写权限,一般为O。n哪e是文件名称,这里直接在/pD0c目录下创建iteIIl3文

件。d砒a项用来区分一个re阳一proc对应多个项的情况,这里指定义了一个处理函数item—reaQ—pnoc。

read』roc定义如下:

typedefint(Tead—pmc)(char+p89e,ch口}}stan,胡0o噩

intcount,int+eoCvoid}da嘲;

其中page是这个p”oc文件的缓冲区,可以把要输出的内容丢到里面去;stan表明这个读后,指向page的哪个位置;Ⅲ为文件偏移;count为要读多少;eof为是不是读完了;data为私有指针。

在item—read_pD0c这个函数中传递地址:

ch8r率addr=(char幸)——pa(Bul—2);

sprind【page,”%u、n”,addr);

因为分配空间时返回的是虚拟地址,而在用户态下用mm印进行映射需要的是物理地址,所以首先进行地址转换—pa(sul_2),即sul_2-PAGE—OF聃ET,用sp血d函数将地址放入proc文件的缓冲区。这时可以使用cat命令查看/pmc目录下生成的相应文件,将看到地址信息。

3)用户态程序访问共享缓存

直接读取proc文件,获得缓存地址,保存在指针addr中:fa_procaddr=叩en(iteIIl3,0一RDONLY);

read(fd-p”Dcaddr'addr,10);

将首地址恢复为长整型,作为映射时的偏移量:

unsignedlongADDR;

ADDR=atol(ad㈣;

把缓存映射到用户进程空间中:在用户进程中打开/dev/mem设备。/dev/m锄也是特殊文件,通过它可以读写系统整个物理内存,而物理内存的地址就用作读/写文件时的位移量。使用mmap把内核态下申请的缓存映射到自己的进程空间,然后就可以读取其中的内容了。

fd=叩en(”/dev/mem”,0一RDWR);

su1_2=mmap(NULL,50,PR0711-READ,MAP—SHARED,fd,ADDR);

使用p血Ⅱ(”%s\n”,sul.2)语句,将会输出thisisKemelData1

3实时内容过滤系统框架

图2内容过滤系统接人的网络结构

实时内容过滤系统采用的是基于网关的实现方式,它与基于代理的实现方式的区别在于工作的层次不同,代理在应用层,而网关在网络层处理数据,效率高、速度快。系统作为

一个独立的控制设备,串接在用户和网络出口之间。所有进

 万方数据

 万方数据

基于Netfilter的数据采集技术在实时内容过滤中的应用

作者:孙鸿斌, 张建标

作者单位:北京工业大学,计算机学院,北京,100022

刊名:

计算机应用

英文刊名:JOURNAL OF COMPUTER APPLICATIONS

年,卷(期):2006,26(z1)

被引用次数:3次

参考文献(5条)

1.毛德操;胡希明Linux内核源代码情景分析 2001

2.博嘉科技Linux防火墙技术探秘 2002

3.RUSSELL R;WELTE H Linux 2.4 Packet Filtering HOWTO 2002

4.The Netfilter Framework in Linux 2.4 2005

5.梁健零拷贝技术研究与实现 2003

本文读者也读过(10条)

1.包萨如拉.张建标.林涛.黄志涛.BAO Sa-ru-la.ZHANG Jian-biao.LIN Tao.HUANG Zhi-tao基于移动代理的网络管理系统的研究与设计[期刊论文]-计算机工程与设计2005,26(11)

2.肖创柏.张建标.牟献军.张建辉基于通信中间件的报刊集中订销网络系统[期刊论文]-计算机工程与科学2004,26(1)

3.解培岱面向内容过滤的协议扩展技术研究与实现[学位论文]2008

4.伍卫民.吴和生.蔡圣闻.黄皓.谢立一种安全高效的透明代理[期刊论文]-计算机应用2002,22(10)

5.唐晓东.韩芳溪.李少玲.程秋云一种基于网关agent的移动Agent间通信机制[会议论文]-2006

6.王钢.刘云Internet代理服务器防火墙技术探讨[会议论文]-2002

7.隋福宁.杨强.SUI Fu-ning.YANG Qiang一种基于改进PU学习理论的推送内容过滤策略[期刊论文]-计算机应用研究2010,27(12)

8.金雷.谢立基于分布式防火墙的透明代理模型[期刊论文]-计算机应用研究2002,19(10)

9.吴泽鸿.寇净磊.鲁云军多Agent防火墙研究[期刊论文]-科技信息2009(12)

10.曹淼.李健.张烨.李园花基于SIP的VoIP穿透NAT方法的研究与实现[期刊论文]-网络安全技术与应用2009(4)引证文献(3条)

1.蒋青.周科.程克非网络内容审计中数据采集系统的设计与优化[期刊论文]-通信技术 2009(2)

2.沈凤仙.朱巧明.刘钊基于Netfilter的实时网页内容过滤器的设计与实现[期刊论文]-微电子学与计算机

2009(7)

3.冯卓.任然信息安全的现阶段问题分析与发展动向[期刊论文]-安全与环境学报 2007(2)

本文链接:https://www.360docs.net/doc/fe7336155.html,/Periodical_jsjyy2006z1075.aspx

相关文档
最新文档