(计算机应用技术专业论文)电子邮件监控与审计系统的设计与研究.pdf_第1页
(计算机应用技术专业论文)电子邮件监控与审计系统的设计与研究.pdf_第2页
(计算机应用技术专业论文)电子邮件监控与审计系统的设计与研究.pdf_第3页
(计算机应用技术专业论文)电子邮件监控与审计系统的设计与研究.pdf_第4页
(计算机应用技术专业论文)电子邮件监控与审计系统的设计与研究.pdf_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 电子邮件监控与审计系统的设计与研究 摘要 随着计算机网络技术以及信息化的飞速发展,电子邮件在人们的学习 和工作中,已经成为必不可少的通讯工具,然而其给人们带来方便的同时 又会造成很多安全隐患。文章在分析了t c p i p 协议的数据传输原理,数 据包的分片与重组算法,s m t p 协议的基础上,提出了基于t c p 会话重 组技术的分布式实时电子邮件监控与审计方法,利用它能够有效地发现并 报告保密或非法信息通过电子邮件的方式泄露出去。下面列出了本课题的 研究内容: 1 使用l i b p c 印对网络中的数据包进行捕获。 2 对于捕获的i p 数据包根据分片信息进行i p 包重组。将重组后的 结果进行协议过滤,选择符合s m t p 协议的的t c p 数据包进行 t c p 包的重组。 3 将获取的邮件数据基于r f c 8 2 l 等协议规则获取邮件的发件人, 主题等内容。同时对进行编码的部分给予解码,获取明文的邮件 内容。 4 选取高效、准确的多模式匹配算法,对邮件中的特征项进行特征 提取。 5 选取合适的文本分类算法,根据上面获取的特征值,对邮件内容 进行评估,判断是否达到某个安全等级。 t 北京化工大学硕士学位论文 关键词:t c m p 协议,会话重组,内容审计,多模式匹配 i l 摘要 d e s i g na n di m p l e m e n t 肖旧i o no fe m a i l m o n i t o r i n ga n da u d i ts y s t e m a b s t r a c t w i t ht h er a p i dd e v e l o p m e n to ft h ec o m p u t e rn e t w o r kt e c l l l l o l o g ya n d i n f b n n a t i o nt e c h n 0 1 0 9 y ,e m a i lh a sb e c o m ea i li n d i s p e n s 曲l ec o n u n u n i c a t i o n s t o o ld u d n gs t u d ya n dw o r k i n g h o w w e r ,i t sc o n v e n i e n c et op e o p l ew i l la l s o c a u s eal o to fp o t e n t i a ls a f e t yp r o b l e m s o nt h eb a s i so fm ea n a l y s i so f 血e d a t at m s m i s s i o nt h e o 珂o ft c p i pp r o t o c o l ,t 1 1 ed i s a s s e n l b l ya n dr e a s s 锄b l y a l g o r i t h mo fp a c k e t sa n dm es m t pp r o t o c o l ,ad i s t r i b u t e dr e a l t i i n ee - m a i l m o n i t o r i n ga n da u d i tm e t h o db a s e do nt c p s e s s i o nr - e a s s e i n b l et e c h n o l o g yi s p r o p o s e di nt h i st h e s i s t h el e a 虹n go fi l l e g a lo rc o n f i d e n t i a li n f o 衄1 a t i o nv i a e m a i lc a ne f f e c t i v e l yb e e nd e t e c t e da u l dr e p o r t e d h e r ea r et h er e s e a r c h c o n t e n t so ft h i st h e s i s : 1 u s e “b p c 印t oc a p m r et h ep a c k e ti nt h en e t w o r k 2 r e a s s e m b l et h ec 印m 】- e di pp a c k e t sb a s e do n 血e 矗阻g m e n ti n f o r m a t i o n t h e nf i l t e rr e s u l t sb yp r o t o c o lt op i c ko u tt c pp a c k e t so fs m t pp r o t o c 0 1 f o rt c pr e a s s e m b l y 3 g e tm a i li n f o m a t i o ns u c ha ss e n d e ra n ds u b j e c tn i o mg a i n e dd a t ab a s e do n p r o t o c o l 锄dm l e sl i k er f c 8 2 l p r o t o c 0 1 a tt h es 锄et i m e ,d e c o d et h e l l l 北京化_ t 大学硕l - 学位论文 c o d e dp a n st og e tp l a i nt e x to f t h em a i l s 4 c h o o s eh i g h - e f r e c t i v ea n dp r e c i s em u l t i - p a t t e mm a t c ha l g o r i m mt oe x t r a c t f e a t u r e sf r o mm a i l s 5 c h o o s e 印p r o p r i a t ea l g o r i m mo ft e x tc l a s s i f i c a t i o n ,a n de v a l u a t et h em a i l c o n t e n tb yf e a t u r ev a l u e sg a j n e df 幻mt h ep r c s t 印 k e yw o r d s :t c p i pp r o t o c o l ,s e s s i o nr e a s s 锄b l e ,c o n t e n ta u d i t i n g , m u l t i p a t t e mm a t c h i v 北京化工大学学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立 进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含 任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重 要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声 明的法律结果由本人承担。 作者签名:差垫亟蔓日期:鲨! 星笪! 关于论文使用授权的说明 学位论文作者完全了解北京化工大学有关保留和使用学位论文的规 定,即:研究生在校攻读学位期间论文工作的知识产权单位属北京化工大 学。学校有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允 许学位论文被查阅和借阅;学校可以公布学位论文的全部或部分内容,可 以允许采用影印、缩印或其它复制手段保存、汇编学位论文。 保密论文注释:本学位论文属于保密范围,在上年解密后适用本授 权书。非保密论文注释:本学位论文不属于保密范围,适用本授权书。 作者签名: 孽垄互蟊 日期:趟,兰:( 导师签名: 妇尘! 型i 日期: 让坌屋:6 = 第一章绪论 1 1 引言 第一章绪论 随着电子邮件这种通讯方式越来越广泛地应用于人们之间的沟通与交流, 随着电子邮件系统的功能从原来仅仅能够发送纯文本内容,到现在m i m e 扩展 协议的出现,各种多媒体介质也可以通过电子邮件进行传输。这就对某些保密或 非法信息的泄露提供了非常便利的途径,对重要信息的安全也造成了极大的威 胁。为了对不法信息进行记录、追踪,为法律法规的实施提供依据,必须对电子 邮件进行监控与安全审计【1 1 。 1 2 电子邮件内容审计系统目前发展现状 目前常用电子邮件审计可以分为邮件服务器文件扫描和基于网络的监听两 种方式,网络监听方式中又可根据是否进行分片重组分成两类。他们都有各自的 优缺点【2 】。 1 2 1 基于邮件服务器文件扫描的电子邮件审计系统 该系统主要通过对邮件服务器中的电子邮件进行扫描,对其内容进行审计。 该系统的优点体现在: 由于系统部署于邮件服务器本地,旃要审计的邮件的访问直接通过访问 物理存储器实现,速度快。 每个邮件都是按照其逻辑结构完整且单独的存储,邮件中的各种信息都 能够方便的访问及获取。 但在以下情况中难以实施; 当电子邮件服务器不在审计人员的管辖范围内,如电子邮件服务器在境 外或不属于本国,出于政策和经济的考虑,不允许安装第三方的审计软件; 电子邮件服务器本身不提供文件扫描接口,或因服务器安装审计软件会 导致负载过大,影响向用户提供正常的电子邮件服务。 1 2 2 基于单独分组的电子邮件审计系统 该系统直接将捕获来的数据包作为审计对象,分析每个数据包中的信息, 北京化工太学硕 :学位论文 判断此会话是否在进行涉密信息的传输。虽然这种方式免去了复杂的数据包重组 过程,对于提高系统效率很有帮助,但它的缺点却显而易见。 由于电子邮件报文在网络传输的过程中会交给下层协议栈处理,同时根据 各种协议设置的m t u 对数据包进行分片,这样从获取的单独数据包中,很多相 互关联的信息可能位于不同的数据包中,例如:因为缺乏上下文,不能根据完整 原始报文准确地知道邮件每部分的编码类型;电子邮件地址信息和电子邮件正 文一般与附件的内容不在同一个分组数据包内,审计系统即使在正文中找到相关 信息,也得不到邮件地址信息,而最终得到的数据包也基本没有审计意义。而且 由于每个数据包都是独立考虑,若某客户端发送了两封邮件:涉密邮件与非涉密 邮件,此系统也很难将他们区分开来。 1 2 3 基于全文重组的电子邮件审计系统 此粪系统通过捕获网络中相关协议的数据包,并对其进行重组,将网络中 传输的信息从较低层次恢复到应用程序能够理解的应用层数据,并对其进行审计 1 3 1 。这样就能获取整个邮件的全部数据,就能够根据电子邮件相关协议,解析出 邮件的内容。从而克服了基于单独分组的电子邮件审计系统的主要缺点,然而这 种方式仍然存在如下缺点: 数据包捕获模块与数据包重组模块都需要消耗c p u 资源,当网络比较繁忙 时,c p u 资源不够同时处理这两个模块,必然导致丢包率上升,从而导致重组 成功率下降,最终使得该系统无法正常工作。 1 3 本文提出的解决方案 结合上述提到的各种电子邮件审计系统,及他们本身的优缺点,本文提出 了一种分布式部分全文重组电子邮件审计系统,该系统是对基于全文重组的电子 邮件审计系统的一种改进,利用了其优点,同时使用如下两种方法对其缺点进行 改进。 将数据包的捕获、重组、电子邮件的解码、内容提取、审计等任务按照 模块合理分割,利用流水线的技术,分布式地进行处理。这样,每个模块只负责 自己的任务,减少了c p u 处理不过来的情况,使得数据重组、审计等操作成功 率大大提高。 根据s m t p 协议,服务器与客户端的数据传输以交互数据为主,这些数 据包都是含有少量的数据,主要用于对服务器与客户端的状态进行同步,以及少 量的信息传输,重组时效率不高。邮件的正文等信息是在服务器端确认了d a t a 2 第一章绪论 命令后,客户端发送给服务器端的以结尾的成块数据,这些数据包中往往包含 大量的数据,重组效率高。由于这些成块数据已经包含了整个邮件的所有信息, 所以我们只需对这些信息进行重组就能成功地对邮件进行分析和审计,且能够解 决重组效率低下的问题。 1 4 论文的研究内容及组织结构 本论文各章的内容如下: 第章介绍论文背景,本系统所需实现的功能,目前的该领域的研究现状 以及本系统所采用的解决方案。 第二章介绍了本系统的总体结构,组成系统的各个模块的大体功能与设计, 以及各个模块间的协作与流程。 第三到第六章针对各个模块的实现做具体的介绍,阐述了相关的技术,以 及各个模块的具体实现。 3 第二章系统总体结构设计 第二章系统总体结构设计 2 1 系统功能及需求分析 电子邮件作为目前种人们进行沟通的工具,变得越来越重要,它已经成 为现在通信方式的一个重要组成部分。然而在给人们带来便利,加快信息交流的 同时,也带来了一系列安全的问题。本系统就是一个部署于网关,对整个局域网 中传输的电子邮件数据包进行还原分析与监控过滤,以有效阻止本局域网中有害 信息的传播或机密信息的泄露的邮件监控与审汁系统。 本系统主要需要实现如下功能: 能够对网络中传输的数据包进行过滤与捕获,得到s m t p 协议相关的数 据包,并对其进行重组,使得获取的数据能够被程序理解。 对获取的电子邮件数据进行分析与审计,判断其内容是否携带涉密信息。 对于发现的违规邮件,记录其发件人、收件人、主题、发送方口等相关 信息,方便将来追究责任时进行取证。 2 。2 各个模块的功能与设计 按照功能将系统主要分为下四个模块:数据包捕获、数据包重组、电子 邮件内容的解码与提取、内容审计。 2 2 1 数据包捕获模块 该模块的主要功能是对网络上传输的数据进行捕获,其实现原理是利用网 卡的混杂模式或交换没备的监视端口获取网络上的通信信息。数据捕获部分又可 分为硬件实现部分和软件实现部分,硬件部分就是相应计算机的网络接口设备, 软件部分选用的是开放源码“b p c 印。 2 2 2 数据包重组模块 该模块的主要功能为对获取的数据包进行数据包重组,协议还原以及协议 过滤,得到应用层能够理解的一整条会话记录,以为之后的审计模块提供原始数 据。这需要根据i p 数据包头中包含的一些分片信息进行口数掘包重组,t c p 包 头中的序列号等信息进行会话重组。同时负责对丢包、重包等错误进行处理。 5 北京化_ 丁大学硕上学位论文 2 2 3 电子邮件内容的解码与提取模块 利用s m t p ,h l t e m e t 的主机就可收发由普通西文字符组成的文本邮件,为 了传送声音图像等多媒体二进制数据,必须将这些数据经过特殊的非字符编码, 于是开发出一种m i m e ( 多用邮件扩展m u l t i p u r p o s ei n t e m e tm a i le x 把n s i o n ) 。该 系统可以处理常规的报文( 普通西文文本) 和声像等二进制数据,它可以将多种不 同的文件打包后传送。这就需要对邮件的内容根据其编码方式进行解码,同时将 获取的信息,如发件人,主题等分别保存起来,供下一步审计之用。 2 2 4 内容审计模块 该模块通过一种合理且高效的算法对获取的邮件信息,如主题,正文,甚 至是附近内容进行审计,判断是否包含有害或涉密信息。如通过审计判断某邮件 为违规邮件,将其发件人、收件人、主题、发送方口等相关信息进行记录,方 便将来追究责任时进行取证。 2 3 系统总体结构与流程设计 本系统采用分布式的结构,流水线的处理方式。数据在各个模块问被逐步 分析与处理,系统结构如下图所示: 图2 - 1 系统结构 f i g 2 - 1t h es 仰曲1 r co f n l i ss y s t i 黜 6 第二章系统总体结构设计 整个系统共分四个独立的模块,采用分布式的结构实现,每个模块由不同 处理器负责处理,相邻的两个模块间设有共享缓存,分别为共享缓存a 、b 、c , 数据按照某种格式,以队列的形式进入和移出此缓存区,两个模块互斥地对其进 行访问和操作。如共享缓存a 就是一个由原始数据包组成的队列,数据包捕获 模块将捕获的数据包插入队列头部,重组模块从队列的尾部获取数据包,同时将 此数据包从队列中移除,根据重组算法进行重组。 系统中的模块相互独立,分布在不同处理器上分别处理,使得每个模块能 够更好的完成自己的任务,不会相互争抢资源,大大减少了未处理数据发生的概 率,使电子邮件的审计工作能够成功完成。同时各个模块并行处理,能够大量地 减少处理时间,提高系统运行效率【4 j 。 7 第三章数据包捕获模块的设计与实现 第三章数据包捕获模块的设计与实现 3 1 理论基础与相关技术研究 网络数据包捕获技术是实现网络数据分析的基础,能否快速、完整的捕获 到所需的数据包,是准确分析网络数据的前提条件。本系统采用l i b p c 印库进行 数据包的采集工作。 3 1 1l b p c a p 数据包捕获机制 l i b p c a p 是u n i x l i n u x 平台下的网络数据包捕获的函数库。它是一个独立 于系统的用户层包捕获a p i 接口,为底层网络监听提供了一个可移植的框架。 l i b p c 印支持b p f 过滤机制。它主要由两部分组成:网络分接头( n e 锕o r kt a p ) 和数据过滤器( p a c k e tf i l t 神。网络分接头从网络设备驱动程序中收集数据拷贝, 过滤器决定是否接受该数据包【5 1 。 3 1 2l i b p c a p 的工作原理 在网卡缺省的工作模式下,只能收到广播的数据包和目的地址是自己的数 据包。所以在进行数据包捕获时,我们首先要将网卡设置为混杂模式,这样就能 捕获到流经该网卡的所有数据包。值得注意的是,捕获到的仅仅是数据包的一份 拷贝,不影响数据包的正常传输。正常情况下当网络数据包到达网卡时,它常规 的传输路径是依次经过网卡、设备驱动器、数据链路层、i p 层、传输层、最后 到达应用层。l i b p c a p 包捕获机制是在数据链路层增加一个旁路处理,它的工作 流程如图3 1 所示。 图3 1l i b p c a p 工作流程图 f i g 3 - 1n e w o r kh o wc h a no fl i b p c 印 当一个数据包到达网络接口时,l i b p c a p 首先利用已经创建的s o c k e t 从链路 层驱动程序获得该数据包的拷贝,再通过t a p 函数将数据包发送给b p f 过滤器。 b p f 过滤器收到数据包后,根据用户已经定义好的过滤规则对数据包进行逐一的 9 北京化工大学硕十学位论文 匹配,符合过滤规则的数据包就是我们需要的,将它放入内核缓冲器,并传递给 用户层缓冲器,等待应用程序对其进行处理。不符合过滤规则的数据包就被丢弃。 如果没有设定过滤规则,所有的数据包都将被放入内核缓冲器。 3 2 使用l b p c a p 进行数据包的捕获 l i b p c 印通过几个主要的函数来捕获数据包。它首先调用p c a p1 0 0 k u p d e v ( ) 函数找到可用的网络接口设备,并返回该网络接口设各的名称。接下来l i b p c a p 调用p c 印o p e i ll i v e ( ) 函数,利用上面打开的接口设备名创建捕获句柄,准备捕 获数据包。同时在该函数中,设置了捕获数据包的相关参数,包括每次捕获数据 包的最大长度、等待超时的时间、接口设备的状态、分配错误信息缓冲区的大小 等【6 1 。 l i b p c 印中的过滤器既可以放在用户空间执行也可以放在内核空间执行,但 是由于数据从内核空间向用户空间拷贝要耗费大量的c p u 周期。为了减少从内 核空间向用户空间拷贝的数据包的数量,提高捕获数据包的效率,最好把过滤器 放在内核级。内核过滤的优势在低速网络下表现不明显,但在高速网络下是非常 突出的。b p f 就是内核级过滤器。b p f 过滤代码从逻辑上看类似于汇编语言,但 它实际上是机器语言。由于b p f 过滤代码对于用户来说过于复杂,因此l i b p c a p 允许用户书写高层的、已经定义好格式的、容易理解的过滤字符串。l i b p c a p 调 用p c a pc o 删? i l e o 函数将其编译成b p f 代码,然后利用p c a p j c t 丘l t e “) 函数把b p f 代码安装到内核中。这样b p f 就可以在内核中根据用户定义好的过滤规则,对 捕获到的数据包进行过滤。 通过b p f 过滤器的数据包会被放入内核缓冲器,没有通过的数据包直接被 丢弃。l i b p c a p 在内核中使用两个缓冲器:分别是存储缓冲器和保持缓冲器。存 储缓冲器用来保存通过过滤器的数据包,而保持缓冲器则用来向用户提供数据。 当数据包通过过滤器后,被不断的放入存储缓冲器,同时用户程序调用函数不断 的从保持缓冲器中取数据。当存储缓冲器满并且保持缓冲器为空时,l i b p c a p 将 它们进行交换,继续重复上面的动作朔。 3 3 数据包捕获模块的实现 利用l i b p c 印函数库来实现数据包的捕获主要通过以下几个步骤来实现: 一下载l i b p c a p 库。 在h t q p :w 瞩能t 印d u i n p o 吲r e l e a s e 上可以下载格式为x t 跹g z 的库文件。 1 0 第二章数据包捕获模块的设计与实现 二安装。 1 用j | j t a rz x v f x t a t g z 命令解压文件到当前目录。 2 进入刚才解开的l i b p c a p 目录,执行撑c o n f i g u 鹏命令,生成m a l ( e 6 l e 文 件。 3 输入舳a l ( ei n s t a l l ,将生成的库安装到系统默认目录中。此目录为u s r l i b , 如果需要修改,可以修改文件m a l ( e f i l e 的p r e f i x 。 4 输入托a k ei n s t a l l i n d ,将头文件安装至系统默认目录:u s r i n c l u d e ,修 改同上。 三使用。 在程序中使用“b p c 印函数库时,首先需要加入i n c l u d e ,将l i b p c a p 提供的主要函数申明包含进来,具体实现详述如下: 1 获取网络设备列表,并打开所需监控的网络设备。 ! ,霉r t r i w et h ed e v i c tl i 虹弧t h e1 0 c d 晴托h i n t 毒, 3 l | 日i fb c a p _ f i n d d l a e 钙一e x 口c p s e c f j t 救婶q 删u 矗a l l d e 甲= ,样r b u f ) 器一1 ) 3 2 ;l e x i t ( 1 ) : 3 3 ;,】| 了帆pt ot t 塘i e l e c t e a 毫l 王姆t t r 拳, 3 4 ;f o r ( a - d l a e v ;:一 n e x t :d - 一h e x t ) : 3 5 3 8 l ,木o p e nt h ea e y i c e 书, 3 7 ; i f ( ( a d h 纰d l e 。p c 姊一o p e n a - n 锄e j ,n 拍毫o ft h ea e v i c 3 8 | 墨6 5 5 3 6 ,p o r t io no t h ep a c k e tt oc 壹蛩t 1 1 r e 3 9 ;l ,6 5 5 3 6 旺a f a l n t e e st h a tt h ew h o l ep a c k e t 臂i 1 1b ec 毫p t l l r e do ni i l lt h el i 矗kl 毫y e r 鼍 4 0 |p c a p _ 0 p e 】l f l 崛j l i 0 喇工s c u 0 崛 p r o m is c l l o 船m o d e _ 4 li i 0 0 0 , r e 毫dt i m e o u t 4 2 嗣v i _ i 呻 ,a m t h e n t ic a t io no 丑t h r e 抽o t e 雨毫c l l i n e 4 3 | e r r b u f ,e r r o rb u f f e r “| 日 ) ) := m i i 工) 4 5 | f 4 6 il 幸f r e et h 毫a 毫,i c el i 暑t | 【, 4 7 l p c a p f r e e a l l d e y s ( 鑫1 1 d e 粥) : 4 8 ;| r e t l l r n i : 4 9 1 1 ) 图3 - 2 打开本地网络设备的实现代码 f i g 3 2n e c o d et oo p e nn e 撕o r kd e v i c eo nt l l el 0 c a lm e c h i i l e 代码中的3 1 行,调用p c a pf i n d a l l d e v se x ( ) 函数获取网络设备列表,保存在 参数a 1 1 d e v s 中,之后将变量d 设置为所选的设备适配器。在3 7 行,利用p c a p _ 9 p e n o 函数打开所选设备,传入的第二个参数为6 5 5 3 6 保证了所有链路层上的数据包都 将捕获。 2 设置l i b p c a p 的过滤器,利用b p f 进行内核级数据包过滤。 代码中将过滤字符串p a c k e u l t e r 设置成”i pa n dt c p ”,利用函数 p c a pc o m p i l e ( ) 将其编译成二进制代码,存储于参数f c o d e 中。并利用 p c a ps e t f i l t 州) 将编译好的过滤代码安装到内存中。至此初始化工作全部完成。 北京化工大学硕士学位论文 c h 毫fp a c k e t f i l t e r 【】:膏i pa n dt c p ”: i f 白c i 田一c o 由p i l e ( 鱼盐蜢d 王e 4 旺c o d p 毫c k e t f i 主t e ol ,n e t m a s k ) n a g s f o ) & o x 2 0 0 0 ; s _ 9 凰e t = ( n t o h s ( i h - n a g s _ f o ) & 0 x l 竭“3 ; 为了进行重组工作,需要一些初始化工作:首先建立一个h a s h 表,以每个 数据包的i d e n t i f i c a t i o n 作为键,对应的项为下图中i p p a c k a g e 结构的指针: 2 6 | 目s t r u c ti p s t 翻e n t 2 t ll 2 8 2 9 3 0 3 l 3 2 3 3 3 4 玎炼和t n 协l 毫p e 氍t : i p s e 印e n t 搴is j r e v : c h a r 木d 氛t a : = h o r to f s 圣t : i n tl e n : : 3 s 骟i t r 讹ti p p 们k 蝇 3 6li 3 t li p s e 舯e n 协ig e x t 3 8 i p s e 硼e n 怫is j 2 e y i n tt o t a l l e n : i n tn o w l e n : 图4 5i p 重组的数据结构 f i g 4 - 5m ed a 诅s 仃u c t 盯cf o f 口r e 鹊s a m b l y 如果bm f 为o ,而且so 馈e t 也为0 ,标识此i p 数据包并未经过分片处理, 不需重组,可直接提交给上层处理。 若这两个变量不满足上述条件,说明此i p 数据包只是一个完整数据包的一 个分片,需要进行重组。 首先根据si d e m 在h a s h 表中查找对应的项,若为空,表示此包为第一个 到达的数据包,新构造一个i p p a c k a g e 结构,并初始化其中的t o t a l l ,e n 变量为1 , n o w l e l l 变量为o ,利用i sn e x t 与i sp 玎e v 两个变量构造一个空的循环链表。之后 用此新到达的数据包初始化i p s e 舯e m 结构,并插入上述空循环链表中,同时将 此数据包的长度加到i p p a c k a g e 结构中的n o w l e n 变量中。 若根据si d e n t 在h a s h 表中查找到的对应项不为空,就需要将此数据包插 入到对应的循环链表中,插入方法为:从链表的尾节点开始向前遍历,寻找。凰e t 小于等于接收报文段序号的第一个报文段i s ,若此报文段存在,计算其与新报文 段重复的字节数i ,如果i 大于o ,则链表中原有报文段与新报文段携带的数据间 存在重复。如果重复的字节数i 大于或等于新报文段的大小,即新报文段中所有 的数据都已包含在原有报文段中,新报文段是重复报文段,予以丢弃;若重复字 节数i 小于新报文段的大小,删除i s 中重复的数据。如果还有后续报文段,则计 算新报文段与下一报文段间重复的字节数j ,1 ) 如果j 小于等于o ,无重复。2 ) 如 果j 小于下一报文段的字节数,则有部分重复,从下一报文段中丢弃起始的j 字 节。3 ) 如果j 大于等于下一报文段的字节数,则出现完全重复,从链表中删除该 报文段。最后将新的报文段插入重组链表中i s 的后面。之后将插入数据的长度 1 9 北京化工大学硕1 :学位论文 加到i p p a c k a g e 结构中的n o w l e n 变量中,同时减去重复字节数。 若此数据包的bm f 为0 ,表示此包为最后一个数据包,根据此包能够获得 整个i p 数据包的总长度,及此包的偏移量so 行s e t 加上此包的数据长度,保存到 i p p a c k a g e 中的t o t a l l e n 奎乏量中。 当某个数据包插入后i p p a c k a g e 中的t o t a l l e n 与n o w l e n 相等时,所有数据 包都已到达且重组完成,可以向上层提交。同时删除h a s h 表中的对应项。 4 2t c p 数据包的重组算法研究 t c p 数据包重组后的数据即为应用层能够理解的数据,本系统需要分析电 子邮件的数据,则首先需要对t c p 数据包进行过滤,仅仅重组端口号为2 5 的数 据包( s m t p 协议规定其端口号为2 5 ) 。同时为了重组更加高效,仅对邮件内容相 关的数据包进行重组,忽略服务器与客户端间互相发送的同步与认证等信息。这 就需要根据s m t p 协议的相关规定来设计t c p 数据包的过滤与重组算法。 4 2 1s m t p 协议 简单邮件传输协议( s i m p l em e s s a g et r a i l s 向p r o t o c o l ,s m t p ) 的目标是可靠 高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺 序的通道。客户与服务器间传输的数据主要为:客户向服务器发出命令,服务器 用数字应答码和可选的人可读字符串进行响应。下图为一个s m t p 会话例子的服 务器端与客户端之间的交互过程: 2 2 0n o 罩o 尊i a i l is e n d 鞠妊i1 i ,3 两i 争n 丞a o g 8 9 譬丑d y 矗暑m o n ,l 穿弧l9 31 2 :1 7 :3 l 量誊g 警 珏e 1 00 舔n 。t 艟c n o a o e 知 2 5 0n o a o e 曲l 插喜工l o 一伽乞u c n o 羞o 毫以,p i e 丑毒dt o 越e 乞y 蛐 溉z 五p r o 五:r 摹t e v e n 0 窘5 啦n c n o e 粕 2 s o 且t o 嘞曩鲁u n 乞u c 霸。藕o 。e 粕 s e n 如ro k 善t c p 它小口:r 曩七e v 鼬亭0 n o a o e 西l 2 o r 毒乞e v 垂n g 叠n o i l q r e c i i r e 矗t 口k , d a l 哺 3 s 】| l 髓七e r 腿i l e l 吐w i h 。o 稿- l 妇eb v 王毒e 1 2 事om 矗王l 曩c c 电嚯圮e a q u l t 2 2 土n o a o e d u 砸l i v e r 土l 埒m 土l 图4 6s m t p 会话 f i g 4 - 6s m t ps e s s i 以 开始的行是s m t p 客户发出的命令,以3 位数字的应答码开始的行是 第四章数据包重组模块的设计与实现 从s m t p 服务器来的。客户首先主动打开t c p 端口2 5 。返回时,客户等待从服 务器来的问候报文( 应答代码为2 2 0 ) 。该服务器的应答必须以服务器的完全合格 的域名开始:本例中为n o a 0 e d u ( 通常,跟在数字应答后面的文字是可选的。这 里需要域名。以s c n d m a i l 打头的文字是可选的) 。下一步客户用h e l o 命令标识 自己。参数必须是完全合格的客户主机名:s u l l t u c n o a o e d u 。m a i l 命令标识出 报文的发起人。下一个命令,r c p t ,标识接收方。如果有多个接收方,可以发 多个r c p t 命令。邮件报文的内容由客户通过d a t a 命令发送。报文的末尾由客 户指定,是只有一个句点的一行。最后的命令q u i t ,结束邮件的交换【1 1 】。 由于邮件报文的全部内容都在客户发送d a t a 命令,且服务器端返回了3 5 4 的应答码后,由客户端发送的,仅仅对此部分数据进行获取就能够得到邮件的全 部信息,因此,本系统的t c p 会话重组只对本会话部分进行重组与获取,忽略 其他服务器与客户端交互的数据,这样能够一定程度上提高重组效率。 4 2 2t c p 数据包的解析 t cp 数据被封装在一个i p 数据报中,如下图所示: 卜卜一 口歙撂报叫 图4 7t c p 数据在数据报中的封装 f i g 4 7t h ee n c 印叭l a t i o no ft c pd a t ai nd p a c l ( a g e 图4 7 显示t c p 首部的数据格式。如果不计任选字段,它通常是2o 个字 节【12 1 。 2 1 1 6 位灏鞴口号 l 难目端口号 3 2 健序号 3 2 位确讽序号 啦酋部 ”prsf 长度 保留( 6 艇) 殳cssyl 1 6 位窗口戈小 ckhfn l 嫩捡硷和 1 6 位紧急指针 r 选璜 j 数据j 图4 8t c p 数据包结构 f i g 4 st 1 1 es t u r eo f l pp 觚k a g e 根据t c p 数据包的结构,定义相应数据结构如下: 2 r 弦三暑t r u c t 2 8 lii t c p i - h e d 盯 # “f i n t c p 二u 骼0 x 2 0 眷d e f i n t c c x0 x 1 0 彝a e f i n et c p p s h0 x 0 8 # d e f i n tt c p 盥t0 如 嚣a e f i n t c ps y 甘0 x 啦 # a e f i n tt c p f 工坪0 曲l 1 l - 譬h o r t 耋p o r t : 1 i = h o r t 却o r t : l i n ts e 掣嘶: k i n t 氯c b 、帅: ”h o r t 量l 1e l l o o d e 三: l 鼍h o r t 霄i n d 。w : q j h o r tc r c : q j h o r tp o ir l t e r : l :u n t 。p 1 。n 5 : 图4 9t c p 包的数据结构 f 培4 9m ed a t as t n l c t u 斯t c pp a c l c a g e i p 分片重组完成的数据报保存于i p j l e a d e r 丰i l l 中,定义t c 正h c a d e r 丰t h ; ( t c p j l e a d e r 奉) ( ( u h a r 事) i 1 1 + i p - 1 c n ) ;则通过m 就可对t c p 数据包中的信息进行 访问与获取。t c p 包头长度计算方法为:t c p j e n ;( n t o h s ( m h l e n o d e s ) o x f 0 0 0 ) 1 0 ;t c p 数据的起始地址与长度的计算方法为:c h a r 毒d a t a :( c h a r ) t h + t c p j e n ;d a t a 1 吼。n t o h s ( i h 一 t i e n ) - i p j e n t c p _ l e n ; 1 3 1 iii,。上 跏驯钏引:琏撕砸蛾删摧蜒“:州 第四章数据包重组模块的设计与实现 二二二_ 一 4 2 3t c p 数据包有选择性重组的理论研究 将罔4 6 的s m t p 会话过程中的所有t c p 数据包传输过程记录可得: 一柚肌硼6 l 圳臻嘲l p 。 嘲l :7 硝柚【1 一 2 2 0 五口毒。曲s 蛐凶“l l ,、i p s h1 盥f 垒n 肯 册w - 嵋- a o 血、r 一 p 鲥邗:1 删础格 一 2 5 口呻拍,e 曲髓l 、 、a p 咎;h 型h 椭l ,矗l 钉 、- 口w n ,矸霉1 u n - 车t l c 玎q 电o d t l ,、r 、n 。盏著誉糕试n 。 2 5 0 蹦铀吨m 音蝌;协亡n 口w w 。一 。 p s h6 l 曩暂,q 1 射_ ,n - 。v ;、o _ 【e v n j 晕n o 膏d u 、譬、4 一 一 芏罴s 口工i 阿雹m t a o 毫口一l 疆一 p s h9 j 母鲥m 刖噜且 d 【睁一 一船帆2 2 硝删硅孵。 一 1 酮e n t e 霉船工1 。e 醴- i t h 、r 矗2 ,嘻 跚钟! | 9 2 瀚q l i ,k 伪 一 ,“日嘲唔封 一 _ 土啦 一 囊酣嘏趟蛄渤赶k 2 疆 。、f 、 州挑删1 钟破掰 一 2 轴协nt 牡卵盘d 、u p 锄曲蜘蜘砷址嬲 靴r t 、r 、4 阳h 西妇删础i 。 - 一 2 2 ln o 蝣e 如幽l i r 土b g “l 、c 、矗 图4 1 0t c p 包的传输过程 f 逛4 - 1 0m e 1 n i l s m i tp r o c 髓so ft c pp a c k a g e 图中左边为客户端s u n ,本地端口为1 0 6 4 ,右边为服务器端n o a o ,每一个 箭头代表一个t c p 数据包。整个s m t p 交互过程共发送了1 7 个t c p 数据包, 数据包l 从服务器端发送到客户端,共7 7 个字节的数据,箭头上方的“p s h l :7 8 仃7 1a c k1 壕示该数据包的序列号( s 。q 删m ) 为1 ( 相对于t c p 连接建立时a c k 包中序列号的偏移量) ,数据长度为7 7 ,同时对对方发送来的序列号为1 的数据 包进行确认。箭头下方为数据包中实际包含的数据。 从图中可以看出,一个s m t p 会话过程主要是客户端发送一些命令,同时 北京化t 大学硕上学位论文 服务器端以返回应答码的方式进行回应。具体邮件内容的传输主要是在客户发送 d a t a 命令,且服务器端返回了3 5 4 的应答码后,客户端发送的一系列数据包, 通常是以“”作为结束标志,之后服务器端给予2 5 0 的应答,表示邮件内容 发送完毕。为了能够正确地对当前的t c p 数据包是否需要进行重组做出判断, 将此交互过程分成五部分,引入系统状态的概念,如下图所示: 臻黝篙h 黧鬻削燃闩嚣h 揪活少爨数据 乓输门激1 a 命令r 3 5 4 成铃l 玛广1邮斜:内容r 1 确琳讼洒 图4 1 1s m t p 会话过程 f i g 4 一l lt l l ep r o c e s so f s m t ps e s s i o n 在服务器与客户端建立t c p 连接等过程时,将系统状态设置为状态0 ,当 捕获到客户端到服务器端的含有d 触队命令的数据包时,将系统状态变为1 ,收 到服务器端的3 5 4 应答码后,状态转为状态2 ,之后监测客户端发送的数据,当 监测到以“ 结尾的数据时,转为状态3 ,直到会话结束。 根据分析,当状态转为状态2 时,所有从客户端发送的数据都需要被重组 并进行保存,此数据就是需要传送给下一个模块的邮件内容。 4 2 4t c p 数据包有选择性重组的算法设计 同口数据包重组类似,算法用到的一个主要数据结构为h a s h 表,与i p 数 据包重组不同的是此h a s h 表以t c p 连接中源地址,源端口,目的地址,目的端 口这四项作为键 1 4 】。每个h a s h 表项对应一个t c p 连接。对于每个到达的t c p 数据包,先分析它的这四个属性,确定属于哪个t c p 连接,然后根据此数据包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论