论文部分内容阅读
【摘 要】系统主要实现了通过网络监控,把通过邮件服务器的电子邮件进行捕获,解码,并与用户配置的关键字的检索,从而检测出那些邮件时涉及了保密信息的邮件,并且给系统配置的管理员发送短信或邮件预警。
【关键词】TCP/IP JPCAP SMTP MIME JAVA
一、系统总体设计及实现
系统的设计分为4个模块,其中网络监控模块是通过对网卡数据包的捕获,最终获取到需要的SMTP协议数据报的原始邮件内容。解析模块就是针对获取到的SMTP数据报进行解析,根据MIME邮件定义的邮件头和邮件体,并通过解码,获取到一个邮件对象,并放入邮件队列,邮件过滤模块会把把邮件队列中的邮件进行过滤,从而找到规则定义的邮件交给邮件处理模块处理。
(一)网络监控
网络监控完成了网卡数据到SMTP协议数据的转换。
1.网卡数据包捕获
网络监控通过监控邮件服务器上的网卡获取所有通过网卡的数据报。网卡数据捕获采用jpcap类库实现。因为核心Java API不能访问底层的网络数据,但Jpcap是一种提供在Windows或UNIX系统上进行这种访问的Java API。 Jpcap不是一种纯粹的Java解决方案,它依赖本地库的使用。在Windows 或 UNIX/LINUX上,必须依赖于第三方库,分别是windows下的WinPcap或UNIX/LINUX下的libpcap。因为java的平台无关性,采用jpcap类库作为网卡数据的捕获。
2.SMTP端口过滤
因为通过的网卡的数据很多,IP数据报直接去解析比较麻烦,但是jpcap提供了可以把IP数据报直接转换为TCP/IP数据报的能力,据此,转换为TCP/IP数据报之后,还需要对邮件发送所使用的协议进行过滤,我们采用的过滤方式为端口的方式过滤。根据邮件发送原理,邮件发送采用SMTP协议,所用的端口为25,所以通过提取TCP/IP数据报的端口,过滤掉非25端口的数据报。至此,网络监控已经实现了针对邮件服务器上邮件数据报的提取。
3.SMTP命令解析
根据端口过滤出来的SMTP命令有很多,所以我们需要把分析邮件的部分找出来。根据SMTP命令可知,当发件方发送完DATA命令之后,下面发送的就是邮件的MIME格式正文部分,但是在实际的研究中发现,如果同时发送接收多个邮件的情况下,这种方式还要判断数据包的流向,更简单的办法是,From字符总会是MIME邮件的第一个字符,所以通过判断From是否在字符的首位,就可以判断是否是邮件的DATA命令之后的邮件正文,而不是其它的SMTP命令。
(二)邮件解析
通过对MIME域的分析,可以得到邮件的发件人(From域),收件人(To域),抄送人(Cc域),主题(Subject域),发送日期(Date域)等信息,并且可以从Content-Type域中知道当前邮件的编码方式是什么,一般中文邮件的编码方式为GBK,GB2312,UTF-8等。然后就需要对邮件的正文部分进行解析,邮件的发送采用multipart類型。一个邮件被分为N个部分,因为本文的目的是做邮件的监控,所以,目前本文的范围只对邮件的正文做关键字过滤,不再还原邮件的附件。所以重点还是针对Content-Type: multipart/alternative; boundary="{分段标识}"的部分进行解析。当这一部分的数据提取完成之后,还需要对邮件的正文进行解码操作,目前采用最多的编码方式为Base64编码。至此,完整的邮件内容已经解析出来。然后把解析到的邮件放到一个处理队列中,并对队列进行实时的序列化处理。
(三)邮件过滤
1.关键字定义
关键字定义在系统的根目录keyword.xml中,该xml就是关键字的定义结构,关键字可以有很多。邮件关键字规则定义如下xml所示。
<?xml version="1.0" encoding="UTF-8"?>
关键字1,……,关键字n
资产,源代码,秘密
2.关键字匹配
通过关键字可对邮件进行过滤,通过解析模块解析出的邮件对象,通过重写邮件对象的toString()方法,通过toString()方法和关键字的比较,如果出现,则把邮件交给邮件处理模块处理。
(四)邮件处理
通知模块实现了对违规邮件队列的监听,当法相违规邮件队列中放入了邮件之后,所有注册的监听器把邮件进行相应的处理。
1.邮件处理监听器
目前实现的监听器有,邮件保存监听器,邮件发送监听器和短信发送监听器。
邮件发送监听器实现了把违规的邮件发送到指定的收件人的功能,邮件发送功能的实现,采用了javamail的方式,没有采用组成MIME格式的方式发送SMTP命令。
短信发送监听器实现了把违规的邮件通过短信的方式发送给指定的手机,由于在实际的环境中,每个地方发送短信的方式都不相同,所以该部分的监听器是只有日志输出,而不提供实际的短信发送功能,常见的短信发送方式有,短信网关的方式,webservice的方式,socket通信的方式。
邮件保存监听器是默认的监听器,该监听器实现了违规邮件的持久化保存,以供后续的查询,报表需求,目前的邮件保存监听器是把邮件保存成文本记录存放在服务器硬盘上。
2.短信邮件监听器配置
短信和邮件监听器的主要结构
<?xml version="1.0" encoding="UTF-8"?>
配置通知 可选值为true或false,当为true时表示启动邮件或短信通知
true
true
配置发送邮件的参数
smtp.163.com
***
****
442304024@qq.com
liang_xj_f@sina.com
配置短信发送的手机号码,可以重复配置多个
13838381438
13800000000
二、系統的测试结果
(一)测试用例
如表5列举了一些系统的测试用例,测试用例没有全部列出,只列出了部分比较有代表性的测试用列。
(二)小结
虽然测试用例没有全部列出,但软件的设计已经满足了系统设计的目的。
参考文献:
[1] 谢希仁:《计算机网络》, 电子工业出版社 2008年第5版
[2] 朱少民:《软件测试方法和技术》 清华大学出版社 2010年7月第2版
[3] 梁勇、李娜:《Java语言程序设计》 机械工业出版社 2011年6月第8版
[4] 史蒂芬·约翰·梅特斯克(Steven John Metsker)、威廉·维克(William C.Wake)、张逸、史磊:《Java设计模式》电子工业出版社 2012年9月第2版
[5] 严蔚敏、吴伟民:《数据结构(C语言版)》清华大学出版社 2011年7月
[6] 萨默维尔(Ian Sommerville)、程成:《软件工程》 清华大学出版社 2011年5月
[7] 埃史尔、陈昊鹏:《Java编程思想》机械工业出版社2007年5月第4版
[8] 史蒂文斯(W.R.Stevens):《TCP/IP详解卷1:协议》 机械工业 2000年4月
[9] 布莱恩特(Randal E.Bryant)、奥哈拉伦(David R.O’Hallaron)、龚奕利、雷迎春:《深入理解计算机系统》 机械工业出版社 2011年1月第2版
[10] 胡晓娅,曹连杰:《无线局域网背景下的电子邮件监控系统研究》,计算机工程与科学 2012年第32卷第2期
[11] 百度百科:《SMTP》,http://baike.baidu.com/view/5450.htm
[12] 百度百科:《MIME邮件格式分析及信息提取》,http://www.studa.net/pc-Theory/080505/11033039-2.html
【关键词】TCP/IP JPCAP SMTP MIME JAVA
一、系统总体设计及实现
系统的设计分为4个模块,其中网络监控模块是通过对网卡数据包的捕获,最终获取到需要的SMTP协议数据报的原始邮件内容。解析模块就是针对获取到的SMTP数据报进行解析,根据MIME邮件定义的邮件头和邮件体,并通过解码,获取到一个邮件对象,并放入邮件队列,邮件过滤模块会把把邮件队列中的邮件进行过滤,从而找到规则定义的邮件交给邮件处理模块处理。
(一)网络监控
网络监控完成了网卡数据到SMTP协议数据的转换。
1.网卡数据包捕获
网络监控通过监控邮件服务器上的网卡获取所有通过网卡的数据报。网卡数据捕获采用jpcap类库实现。因为核心Java API不能访问底层的网络数据,但Jpcap是一种提供在Windows或UNIX系统上进行这种访问的Java API。 Jpcap不是一种纯粹的Java解决方案,它依赖本地库的使用。在Windows 或 UNIX/LINUX上,必须依赖于第三方库,分别是windows下的WinPcap或UNIX/LINUX下的libpcap。因为java的平台无关性,采用jpcap类库作为网卡数据的捕获。
2.SMTP端口过滤
因为通过的网卡的数据很多,IP数据报直接去解析比较麻烦,但是jpcap提供了可以把IP数据报直接转换为TCP/IP数据报的能力,据此,转换为TCP/IP数据报之后,还需要对邮件发送所使用的协议进行过滤,我们采用的过滤方式为端口的方式过滤。根据邮件发送原理,邮件发送采用SMTP协议,所用的端口为25,所以通过提取TCP/IP数据报的端口,过滤掉非25端口的数据报。至此,网络监控已经实现了针对邮件服务器上邮件数据报的提取。
3.SMTP命令解析
根据端口过滤出来的SMTP命令有很多,所以我们需要把分析邮件的部分找出来。根据SMTP命令可知,当发件方发送完DATA命令之后,下面发送的就是邮件的MIME格式正文部分,但是在实际的研究中发现,如果同时发送接收多个邮件的情况下,这种方式还要判断数据包的流向,更简单的办法是,From字符总会是MIME邮件的第一个字符,所以通过判断From是否在字符的首位,就可以判断是否是邮件的DATA命令之后的邮件正文,而不是其它的SMTP命令。
(二)邮件解析
通过对MIME域的分析,可以得到邮件的发件人(From域),收件人(To域),抄送人(Cc域),主题(Subject域),发送日期(Date域)等信息,并且可以从Content-Type域中知道当前邮件的编码方式是什么,一般中文邮件的编码方式为GBK,GB2312,UTF-8等。然后就需要对邮件的正文部分进行解析,邮件的发送采用multipart類型。一个邮件被分为N个部分,因为本文的目的是做邮件的监控,所以,目前本文的范围只对邮件的正文做关键字过滤,不再还原邮件的附件。所以重点还是针对Content-Type: multipart/alternative; boundary="{分段标识}"的部分进行解析。当这一部分的数据提取完成之后,还需要对邮件的正文进行解码操作,目前采用最多的编码方式为Base64编码。至此,完整的邮件内容已经解析出来。然后把解析到的邮件放到一个处理队列中,并对队列进行实时的序列化处理。
(三)邮件过滤
1.关键字定义
关键字定义在系统的根目录keyword.xml中,该xml就是关键字的定义结构,关键字可以有很多。邮件关键字规则定义如下xml所示。
<?xml version="1.0" encoding="UTF-8"?>
资产,源代码,秘密
2.关键字匹配
通过关键字可对邮件进行过滤,通过解析模块解析出的邮件对象,通过重写邮件对象的toString()方法,通过toString()方法和关键字的比较,如果出现,则把邮件交给邮件处理模块处理。
(四)邮件处理
通知模块实现了对违规邮件队列的监听,当法相违规邮件队列中放入了邮件之后,所有注册的监听器把邮件进行相应的处理。
1.邮件处理监听器
目前实现的监听器有,邮件保存监听器,邮件发送监听器和短信发送监听器。
邮件发送监听器实现了把违规的邮件发送到指定的收件人的功能,邮件发送功能的实现,采用了javamail的方式,没有采用组成MIME格式的方式发送SMTP命令。
短信发送监听器实现了把违规的邮件通过短信的方式发送给指定的手机,由于在实际的环境中,每个地方发送短信的方式都不相同,所以该部分的监听器是只有日志输出,而不提供实际的短信发送功能,常见的短信发送方式有,短信网关的方式,webservice的方式,socket通信的方式。
邮件保存监听器是默认的监听器,该监听器实现了违规邮件的持久化保存,以供后续的查询,报表需求,目前的邮件保存监听器是把邮件保存成文本记录存放在服务器硬盘上。
2.短信邮件监听器配置
短信和邮件监听器的主要结构
<?xml version="1.0" encoding="UTF-8"?>
配置通知 可选值为true或false,当为true时表示启动邮件或短信通知
配置短信发送的手机号码,可以重复配置多个
二、系統的测试结果
(一)测试用例
如表5列举了一些系统的测试用例,测试用例没有全部列出,只列出了部分比较有代表性的测试用列。
(二)小结
虽然测试用例没有全部列出,但软件的设计已经满足了系统设计的目的。
参考文献:
[1] 谢希仁:《计算机网络》, 电子工业出版社 2008年第5版
[2] 朱少民:《软件测试方法和技术》 清华大学出版社 2010年7月第2版
[3] 梁勇、李娜:《Java语言程序设计》 机械工业出版社 2011年6月第8版
[4] 史蒂芬·约翰·梅特斯克(Steven John Metsker)、威廉·维克(William C.Wake)、张逸、史磊:《Java设计模式》电子工业出版社 2012年9月第2版
[5] 严蔚敏、吴伟民:《数据结构(C语言版)》清华大学出版社 2011年7月
[6] 萨默维尔(Ian Sommerville)、程成:《软件工程》 清华大学出版社 2011年5月
[7] 埃史尔、陈昊鹏:《Java编程思想》机械工业出版社2007年5月第4版
[8] 史蒂文斯(W.R.Stevens):《TCP/IP详解卷1:协议》 机械工业 2000年4月
[9] 布莱恩特(Randal E.Bryant)、奥哈拉伦(David R.O’Hallaron)、龚奕利、雷迎春:《深入理解计算机系统》 机械工业出版社 2011年1月第2版
[10] 胡晓娅,曹连杰:《无线局域网背景下的电子邮件监控系统研究》,计算机工程与科学 2012年第32卷第2期
[11] 百度百科:《SMTP》,http://baike.baidu.com/view/5450.htm
[12] 百度百科:《MIME邮件格式分析及信息提取》,http://www.studa.net/pc-Theory/080505/11033039-2.html