《邮件监控SMTPPOP3系统设计与实现(含源文件).docx》由会员分享,可在线阅读,更多相关《邮件监控SMTPPOP3系统设计与实现(含源文件).docx(57页珍藏版)》请在三一办公上搜索。
1、摘 要本论文主要研究了使用LIBNIDS网络安全开发包对邮件客户端收发的邮件的还原。邮件客户端收发邮件时涉及到的协议是SMTP协议和POP3协议。利用LIBNIDS网络安全开发包对邮件的数据包进行捕获,实现了邮件发件人、收件人、抄送人、收发日期、邮件主题、邮件内容和邮件的附件名称信息的提取。在对邮件的各字段进行还原的过程中,对SMTP和POP3进行协议分析,使用捕获到的SMTP协议和POP3协议邮件的数据包中的内容,分析了邮件的发送和接收时各字段所在的位置和对应的格式。对于含有汉字的字段,如发件人、收件人、抄送人、主题、内容和附件名的还原,也利用分析出的邮件各字段数据格式,设计出汉字还原的方法
2、。在此基础上,实现了邮件监视端软件的编写,利用互联网信息服务(IIS)浏览被监视计算机中的邮件日志文件,实现了邮件监控子系统中监视邮件收发情况的功能。关键词网络监控;邮件监控;邮件还原;SMTP;POP3AbstractThis thesis mainly focused on the restoration for the e-mail client to send or receive e-mails using the development package of network security LIBNIDS. E-mail client to send and received e
3、-mails related to SMTP and POP3 protocol. Making use of LIBNIDS to capture the packets of e-mails, its achieved the restoration of main information in e-mails, including the sender, recipient, carbon copy (cc), date, subject, content and attachment name.In the process of restoring e-mails, it carrie
4、d out on the SMTP and POP3 protocol analysis. With the content of e-mails captured based on SMTP and POP3 protocol, we have analyzed the format for corresponding field in e-mail. While the field contains characters, such as sender, recipient, cc, subject, content and attachment name we also analyzed
5、 the format for corresponding field and designed the means to restore Chinese characters.Using of the Internet Information Services (IIS) on this basis, its achieved the function of monitoring the situation to send and receive e-mails in the subsystem of e-mail monitoring.Key wordsnetwork monitoring
6、 e-mail monitoring e-mail restoration SMTP POP3不要删除行尾的分节符,此行不会被打印目 录摘 要IAbstractII第1章 绪论11.1 课题背景11.2 课题来源、目的和意义11.2.1 国外研究现状11.2.2 国内研究现状21.3 主要研究内容21.3.1 邮件监控21.3.2 监控端软件31.4 本文结构3第2章 理论基础42.1 引言42.2 SMTP协议和POP3协议42.2.1 SMTP协议简介42.2.2 POP3协议简介62.3 LIBNIDS开发包72.3.1 LIBNIDS简介72.3.2 LIBNIDS数据结构92.3.3
7、 LIBNIDS基本函数112.3.4 LIBNIDS的使用122.4 BASE64简介132.5 本章小结13第3章 邮件监控子系统构成和框架143.1 引言143.2 模块组成143.3 运行框架173.4 本章小结18第4章 基于SMTP和POP3协议的邮件还原194.1 引言194.2 总流程194.3 具体实现224.3.1 提取发件人224.3.2 提取收件人234.3.3 提取抄送人254.3.4 提取主题274.3.5 提取日期294.3.6 提取内容304.3.7 提取附件名324.4 邮件还原中的问题及解决办法344.5 本章小结35第5章 监视端的实现365.1 引言36
8、5.2 监视端框架365.3 具体实现375.3.1 数据库375.3.2 IIS设置385.3.3 日志浏览、刷新和保存385.3.4 添加和删除监视计算机405.4 软件编写中的问题及解决办法415.5 本章小结41第6章 综合测试426.1 引言426.2 准备工作426.3 测试436.3.1 收件人、抄送人、主题、内容是英文情况436.3.2 收件人、抄送人、主题、内容是汉字情况446.3.3 多收件人或抄送人情况446.3.4 含有多附件情况456.3.5 邮件内容超量情况456.3.6 被监视计算机未启动情况476.4 本章小结47结 论48致 谢49参考文献50千万不要删除行尾
9、的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。打印前,不要忘记把上面“Abstract”这一行后加一空行第1章 绪论1.1 课题背景随着企业内部局域网络和办公自动化的普及,企业的办公及业务环境得到很大的改善,同时,网络的安全问题也越来越受到关注。由于企业内部网中存有与企业相关的机密信息,而这些信息关乎到企业的利益,甚至生存,因此,企业内部局域网中的核心机密数据的安全性越来越为人们所关注,对文件数据的安全管理系统的研究有着非常重要的现实意义1。电子邮件作为互联网高速发展的一个标志,它的使用越来越普遍,不仅成为企业内部的沟通桥梁,也是企业和外部进行各类业务往来的重要管道
10、,为保护商业秘密不通过邮件外泄,成为企业的一件大事,邮件监控也就越来越重要2。不仅对于企业,对于校园内的各个实验室,计算机中文件的安全问题仍然是不可忽视的。作为实验室内部人员发送邮件的监视系统,不仅要监视收件人、主题和内容等信息,邮件的附件名称等也需要获取,因此邮件监控尤为重要。文中主要研究了基于SMTP协议和POP3协议的邮件主要信息的还原,使用LIBNIDS网络安全开发包,捕获使用邮件客户端收发的邮件的数据包,并对邮件的发件人、收件人、抄送人、邮件日期、主题、内容和附件名称进行还原。能够在监视端浏览被监视计算机中的邮件日志文件,达到了监视的效果。1.2 课题来源、目的和意义本课题来自于计算
11、机网络与信息安全技术研究中心。通过对邮件监控子系统的研究与实现,达到对企业内部网和实验室局域网中收发邮件的监视,发现泄露信息的人员,实现企业和实验室的保密工作。1.2.1 国外研究现状国外有一些邮件监控的共享软件3。比如:Email Monitoring,是一款可以监控多个电子邮件账户的软件。它不仅仅实现了电子邮件的监控,还可以过滤垃圾邮件。另如SOFTX电子邮件监视器,可以监控所有向外发送的邮件,可以提醒未经批准或未知的程序正试图发送电子邮件,可以阻止电子邮件发送到未知的收件人以及电子邮件中包含可能不安全的附件等4。1.2.2 国内研究现状目前国内已经有不少网络监控软件3。比如:Work W
12、in管理专家、“清扬”网络综合管理系统、网路岗、ANYVIEW(网络警)网络监控软件、百络邮件监控系统等等。这些软件实现了局域网内用户的监控,有的侧重于为企业服务,监视员工的行为,包括游戏、聊天、上网、发送邮件等;有的侧重于一方面的监视,像邮件的监视,网络访问的监视等等4。其中的易风邮件监控系统,基于MAC地址进行监控;监控网络内所有收发邮件的内容及附件,(outlook、fox mail等邮件客户端,包括WEB发送);可对所有收发邮件进行拦截、阻挡,禁止发送或者接收某些邮件;可监控收发邮件的邮箱地址及抄送、密送邮箱地址;可设置报警信息,对监控、拦截或者过滤的邮件进行报警提示,自动弹出;可监控
13、邮件内容中某些带敏感字符的邮件或者有指定名称的附件;可指定监控某个邮箱或者某些邮箱,包括抄送、密送邮件地址;可对收发邮件内容进行审查过滤,有敏感字符的邮件不能外发;可指定某个邮箱发信,指定发送到某个邮箱,禁止抄送、密送或者禁止某些邮箱不能发信;可对收发邮件内容大小进行控制;可对收发邮件附件大小、附件名称进行控制;可将系统日志和监控日志进行备份导出;可按时间、组别或者部门、机器名、IP、MAC地址、发件人、收件人、主题、关键词、发送类型等方式对监控邮件进行查询;可以按组别或者部门进行监控,可以按用户权限进行管理查询;该系统品质优秀,操作简单,功能强大。1.3 主要研究内容1.3.1 邮件监控邮件
14、监控包括监控Outlook、Fox mail等邮件客户端工具和Web Mail(浏览器通过Web方式来收发电子邮件)。本文中只对使用邮件客户端收发的邮件进行监视,邮件客户端使用SMTP协议发送邮件,使用POP3协议接收邮件。记录发送邮件的各种信息,包括发送和接收方的邮件账号、抄送的邮件账号、邮件主题、邮件正文、邮件附件名字、邮件服务器的IP地址等,并写入日志文件。1.3.2 监控端软件为了在监视端浏览被监视者的日志,要编写一个具有浏览被监视者计算机上的邮件日志文件的软件。该软件可以添加需要监控的计算机,删除监控的计算机,浏览日志,保存日志的功能。如果被监视的计算机未启动,则显示指定内容。1.4
15、 本文结构本文主要内容如下:第2章中,介绍了邮件监控子系统研究与实现的理论基础,简单介绍了SMTP和POP3协议、 LIBNIDS开发包、BASE64编码。第3章中,介绍了邮件监控子系统的系统构成和框架。第4章中,介绍了基于SMTP协议和POP3协议的邮件还原。第5章中,介绍了监视端软件的具体实现。第6章中,测试邮件监控子系统,对不同类型的邮件收发情况进行了测试。双击上一行的“1”“2”试试,J(本行不会被打印,请自行删除)第2章 理论基础2.1 引言邮件客户端收发邮件使用的是POP3协议和SMTP协议,在进行邮件还原之前有必要了解这两种协议的工作原理和原始命令码。在对这两种协议的数据包进行捕
16、捉的时候,使用到了LIBNIDS网络安全开发包,所以本章中会对各种网络开发包进行一下对比,说明为什么要选择LIBNIDS网络安全开发包,并对LIBNIDS进行介绍,提及LIBNIDS的一些重要结构体和函数,以及LIBNIDS的基本运行框架。在对邮件中的中文进行还原的过程中,使用到了Base64编码。本章中也对其进行了简单的介绍。2.2 SMTP协议和POP3协议2.2.1 SMTP协议简介SMTP称为简单Mail传输协议(Simple Mail Transfer Protocol),是一组用于由源地址到目的地址传送邮件的协议,用以控制信件的中转方式。目标是向用户提供高效、可靠的邮件传输。SMT
17、P协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,可以把电子邮件寄到收信人的服务器上1。SMTP工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP提供了一种邮件传输机制,当收件方和发件方都在同一个网络上时,可以把邮件直接传给对方。当对方不在同一个网络上时,需要通过一个或几个中间服务器转发。SMTP首先由发件方提出申请,要求与接收方SMTP简历双向的通信渠道。收件方可以是最终收件人,也可以是中间转发的服务器。收件方服务器确认可以建立连接后,双方就可以开始通信。SMTP是个请求/响应协议
18、,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接1。本文使用的SMTP协议工作在第一种情况下。SMTP协议的基本流程如下:首先,建立连接;其次,客户端发送命令,以标识发件人自己的身份,然后发送邮件命令,服务器端做出响应,表明是否准备接收;再次,客户端发送邮件,以标识该电子邮件的计划接收人,服务器端则表示是否愿意为收件人接收邮件,如果写上成功,则发送邮件;最后,结束此次发送,退出连接2。在SMTP协议中,最重要的内容是SMTP命令和响应状态,这是SMTP运行的基础。SMTP命令都已回车换行作为结束标识,下面对他们做详细描述3。HELLO:参数,识别发送方到接
19、收SMTP的一个HELLO命令。MAIL FROM:参数为,表示发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。RCPT TO:参数为,表示各个邮件接收者的地址。DATA:无参数,接收SMTP将把其后的行为看作邮件数据去处理,以“回车换行.回车换行”标识数据的结尾。REST:无参数,表示重置会话,当前传输被取消。NOOP:无参数,表示无操作,服务器应响应OK。QUIT:无参数,表示要求接收SMTP返回一个OK应答并关闭传输。VRFY:参数,表示验证指定的邮箱是否存在。EXPN:参数,表示验
20、证给定的邮箱列表是否存在。HELP:无参数,查询服务器支持什么命令。SMTP客户端向SMTP服务器发送命令之后,SMTP服务器就会返回一个应答码。应答码的每一个数字都有特定含义,第一位数字为2时表示命令成功,为5时表示失败,3时表示没有完成。下面详细描述应答码的含义。501:表示参数格式错误;502:表示命令不可实现;503:表示错误的命令序列;504:表示命令参数不可实现;211:表示系统状态或系统帮助响应;214:表示帮助信息;220:表示服务就绪;221:表示服务关闭;421:表示服务未就绪,关闭传输信道;250:表示要求的邮件操作完成;251:表示用户非本地;450:表示要求的邮件操作
21、未完成,邮箱不可用;550:表示要求的邮件操作未完成,邮箱不可用;451:表示放弃要求的操作;551:表示用户非本地;452:表示系统存储不足,要求的操作未执行;552:表示过量的存储分配,要求的操作未执行;553:表示邮箱名不可用,要求的操作未执行;354:表示开始邮件输入,以“.”结束;554:表示操作失败4。2.2.2 POP3协议简介POP3(Post Office Protocol 3)是适用于客户服务器结构的脱机模型的电子邮件协议。它规定了怎样将个人计算机连接到Internet邮件服务器和下载电子邮件的电子协议,允许用户从服务器上把邮件存储到本地主机上,同时删除保存在邮件服务器上的
22、邮件5。POP3服务器是遵循POP3协议的接收邮件服务器,用来接收电子邮件。在POP3协议中有三种状态:认可状态,处理状态和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出QUIT命令,则进入更新状态,更新之后重返认可状态。大多数现有的POP3客户机与服务器执行采用ASCII明文发送用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器进行身份验证,一旦确认成功,边转入处理状态。POP3命令由命令和参数组成。所有命令以一个回车换行CRLF结束。命
23、令和参数由可打印的ASCII字符组成,他们之间由空格隔开。命令一般是三到四个字母,每个参数却可达四十个字符长。POP3响应是有一个状态码和一个可能跟有附加信息的命令组成。所有响应也是有回车换行CRLF结束的。有两种状态码,状态码“+OK”表示成功,状态码“-ERR”表示失败。下面对POP3命令进行详细介绍。USER:参数username,在认可状态下有效,表示用户名;PASS:参数password,在认可状态下有效,表示用户密码,与命令USER一起使用,如果操作成功,就导致状态转换;APOP:参数为Name和Digest,在认可状态下有效,其中Digest是MD5消息摘要;STAT:无参数,在
24、处理状态下有效,它请求服务器返回关于邮箱的统计资料;UIDL:参数为Msg#,在处理状态下有效,它返回邮件的惟一标识符;LIST:参数为Msg#,在处理状态下有效,他返回邮件数量和每个邮件的大小;RETR:参数为Msg#,在处理状态下有效,它返回由参数标识的邮件的全部文本;DELE:参数为Msg#,在处理状态下有效,它表示服务器将有参数标识的邮件标记为删除。执行QUIT命令后,邮件将删除;RSET:无参数,在处理状态下有效,服务器取消所有标记为删除的邮件,用于撤销DELE参数;TOP:参数为Msg#,在处理状态下有效,服务器将返回由参数标识的邮件前n行内容,n必须是正整数;NOOP:无参数,在
25、处理状态下有效,服务器返回一个肯定的响应;QUIT:无参数,在更新状态下有效,退出。2.3 LIBNIDS开发包2.3.1 LIBNIDS简介LIBNIDS是网络安全开发包的一种,网络安全开发包是指用于网络安全研究和开发的一些专业开发函数库。它的主要作用是提供用于网络安全研究和开发的基本功能的实现,为了研究者和开发者进一步研究和开发网络安全提供编程接口,为了网络安全功能的实现提供方便6。网络安全开发包的最大作用适用于设计网络安全系统,其直接功能是实现了某些网络安全技术,如网络数据包捕获技术、网络数据包生成技术等。利用它们可以很快地实现某些网络安全系统的基本功能。例如,使用网络数据包捕获技术可以
26、实现网络监视系统的最基本功能,而使用网络数据包生成技术可以构造网络安全扫描系统的基本功能。网络安全开发包在实际的系统中得到了广泛的应用,一些比较著名的网络安全系统都使用了一些网络安全开发包。网络安全开发包的种类非常多,其实现的功能也干差万别。新的网络安全开发包不断涌现,很多不成熟的网络安全开发包也在不断壮大、成熟。一些在实际的使用中用得比较多的网络安全开发包如下:(1)网络数据包捕获开发包Libpcap;(2)Windows平台专业数据包捕获开发包WinPcap;(3)网络数据包构造和发送开发包Libnet;(4)网络入侵检测开发包Libnids;(5)通用网络安全开发包Libdnet。网络入
27、侵检测开发包Libnids(Library Network Intrusion Detection System)是一个用于网络入侵检测系统设计的专业开发包,提供了一个网络入侵检测系统的基本框架和基本功能。它可以进行IP碎片重组和TCP流重组,还提供了监测网络扫描的功能7。利用Libnids可以快速地实现网络入侵检测的基本功能。本文中使用的并非是Libnids的网络入侵检测,而是它的IP碎片重组和TCP流重组,使用它们进行数据包的捕获,进而实现邮件信息的还原。Libnids是基于Libpcap和Libnet而开发的,所以具有它们的优点,以及跨平台、可移植、稳定、方便等特点。利用Libnids可
28、以进行数据包的捕获,并对捕获到的数据包进行协议分析,当然也可以对数据包进行过滤,只不过感兴趣的数据包。利用Libnids可以进行协议分析,如分析IP、TCP、UDP、等协议。本文中只需要对SMTP和POP3协议的数据包进行过滤,只分析这些数据包。Libnids提供的TCP数据流重组功能是非常强大的,它可以对基于任何TCP协议的应用层协议进行TCP数据流重组,显示他们的连接过程,并对它们传输的数据进行分析。利用Libnids提供的TCP数据流重组功能,可以实现对敏感数据的分析,如对用户、密码、账号进行嗅探。利用Libnids提供的TCP数据流重组功能,还可以对网络传输的内容进行还原,重现网络数据
29、。例如,可以利用Libnids的TCP数据流功能来分析HTTP协议,同时,对所传输的内容(如网页)进行分析。网络实际传输的是HTML文件内容,对其进行分析,就可以对网页进行重现。例如,可以对POP3和SMTP协议传输的邮件内容进行重现。Libnids是仿照Linux操作系统内核的网络协议栈来实现的,所以它提供的功能非常稳定、可靠,通过了很多测试过程。IP碎片重组是Libnids提供的另外一个重要功能,利用它可以捕获所有的IP碎片数据包(包括异常数据包),当然也可以捕获正常的IP数据包。Libnids不仅可以捕获异常IP数据包,也可以检测异常TCP数据包和异常UDP数据包。LIbnids还提供了
30、端口扫描检测功能,能够检测TCP端口扫描攻击,并检测出TCP端口扫描类型3。2.3.2 LIBNIDS数据结构2.3.2.1 基本常量在Libnids中定义了一些基本的常量,这些常量都有特定的含义。下面对他们进行介绍。1.报警类型Libnids提供了对IP数据包异常、TCP数据包异常、UDP数据包异常以及扫描攻击的检测,对于不同的攻击方式提供不同的报警类型。2.Libnids状态在对TCP数据流进行重组时,必须考虑到TCP的连接状态,在Libnids中为了方便开发而定义了Libnids状态,共有如下6种:#define NIDS_JUST_EST 1#define NIDS_DATA 2#de
31、fine NIDS_CLOSE 3#define NIDS_RESET 4#define NIDS_TIMED_OUT 5#define NIDS_EXITING 62.3.2.2 重要结构体tuple4:tuple4数据结构是Libnids中最基本的一种数据结构,其定义如下:struct tuple4 u_short source; u_short dest; u_int saddr; u_int daddr;tuple4数据结构描述的是一个地址端口对,它表示发送方IP和端口以及接收方IP和端口,当它用于TCP连接时,其具体意义描述如下:成员saddr表示一个TCP连接的一端IP地址,称为源
32、IP地址;成员daddr表示一个TCP连接的另一端IP地址,成为目的地址,注意此时的源和目的只是相对的;成员source表示源IP地址的端口号;成员dest表示目的IP地址的端口号。tuple4数据结构包括描述TCP连接的四个重要参数信息:源IP地址、目的IP地址、源端口和目的端口。half_stream:half_stream数据结构用来描述在TCP连接中一端的所有信息,可以使客户端,也可以是服务器端。half_stream描述的是一个TCP连接的一端的信息。一个TCP连接有两端,任何一端可以用词数据结构来进行描述。其中与开发者密切相关的成员有以下几种,其他的可以都不用考虑。成员state表
33、示套接字的状态,也就是TCP连接状态。成员collect可以用来表示有数据达到,此数据存放在data成员中,也可以表示不存储此数据到data中,此数据忽略。如果大于0就存储,否则就忽略。成员collect_urg可以表示是否有紧急数据到达,此数据存放在urgdata中,也可以表示不存储此数据到urgdata中,此数据忽略。如果大于0就存储,否则就忽略。成员data用来存储正常接收到的数据。成员offset表示存储在data中的数据的第一个字节的偏移量。成员count表示从TCP连接开始已经存储到data中的数据的字节数。成员count_new表示有多少新的数据存储到data中,如果为0表示没有
34、新的数据到达,。成员urgdata用来存储紧急数据。成员count_new_urg表示有新的紧急数据到达,如果为0表示没有新的紧急数据。虽然数据结构half_stream的成员非常多,但需要关注的就这几个。其中成员state非常重要,它表示了当前的TCP连接状态,只有知道了TCP连接状态后,才能进行下一步的动作。成员data用来存储接收到的正常的网络数据信息,而urgdata用来存储接收到的紧急数据。判断是否有新的正常数据到达,是利用成员count_new来进行判断的,判断是否有新的紧急数据到达,是利用成员count_new_urg来进行判断的。如果count_new大于0,就表示有新的紧急数
35、据到达,如果count_new_urg大于0,就表示有新的紧急数据到达。然后就可以输出新到达的数据内容,正常数据存储在data中,紧急数据存储在urgdata中。tcp_stream:tcp_stream数据结构描述的是一个TCP连接的所有信息。2.3.3 LIBNIDS基本函数(1) int nids_init(void);函数返回值:函数调用成功就返回1,失败就返回0。此函数的功能是对Libnids进行初始化,这是所有设计基于Libnids的程序最开始调用函数。它的主要内容包括打开网络接口、打开文件、编译过滤规则、设置过滤规则、判断网络链路层类型、惊醒必要的初始化工作。(2) void n
36、ids_run(void);函数无返回值。此功能是运行Libnids,进入循环捕获数据包状态。它实际上是调用Libpcap函数pcap_loop()来循环捕获数据包。(3) void nids_register_tcp(void(*);此函数是注册一个TCP连接的回调函数。回调函数的类型定义如下:Void tcp_callback(struct tcp_stream *ns, void * param);其中ns表示一个TCP连接的所有信息,它的类型是tcp_stream数据结构;参数param表示要传递的连接参数信息,可以指向一个TCP连接的私有数据。次回调函数接收的TCP数据放在half_
37、stream的缓存中,应该马上取出来,一旦次回调函数返回,此数据缓存中的数据就不存在了。2.3.4 LIBNIDS的使用2.3.4.1 LIBNIDS安装本文中的邮件监控子系统是在Windows平台下运行的,所以下面只介绍Windows平台下Libnids的安装。在Windows平台下,Libnids的Windows版本是Libnids-win32,最新版本为1.19,其安装过程非常简单。首先从网站上下载其开发包,名称为Libnids-W32-1.19.tar.gz。然后用解压缩软件对开发包进行解压缩,存储在一个目录下面,如F:Libnids-1.19。打开此文件夹可以发现里面有很多文件。其中
38、,子文件夹src下面是Libnids的源代码;doc下面是文档;samples下面是一些很好的参考例子;WIN32-Code下面是与Windows平台相关的源代码;WIN32-Include下面是Libnids开发包的包含的头文件,这个事开发者所要使用到的;WIN32-Libraries是Libnids开发包的静态链接库文件,也是开发者要用到的;WIN32-PRJ是Libnids开发包本书和参考例子的Visual C+项目文件。子文件夹WIN32-Include和WIN32-Libraries是开发者关心的,必须把他们的路径添加到Visual C+开发环境中,此时就可以使用Libnids来开发
39、程序了8。2.3.4.2 LIBNIDS运行框架使用Libnids最重要的是编写捕获数据包的回调函数,编写完回调函数后经过Libnids的初始化,注册该回调函数,进入循环捕包状态。其运行框架如下:void main()/准备工作/Libnids初始化if(!nids_init()exit(1);/注册分析SMTP协议的回调函数nids_register_tcp(smtp_protocol_callback);/进入循环捕获数据包的状态nids_run();82.4 BASE64简介邮件的发件人、收件人、抄送人、主题、内容和附件名中如果含有汉字,那么它们需要经过Base64编码后才进行传输。下面
40、对Base64进行简单介绍。Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,常用在需用通过文本协议(比如HTTP和SMTP)来传输二进制数据的情况下。Base64并不是一种用于安全领域的加密解密算法(这类算法有DES等),尽管有时也听到使用Base64来加密解密的说法,但这里所说的加密与解密实际是指编码(encode)和解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别。Base64采用了一种很简单的编码转换:对于待编码数据,以3个字节为单位,依次取6位数据并在前面补上两个0形成新的8位编码,这样3个字节的输入会变成4个字节的
41、输出,长度上增加了1/3。上面的处理还不能保证得到的字符都是可见字符,为了达到此目的,Base64制定了一个编码表,进行统一的转换。码表的大小为64,这也是Base64名称的由来。另外还有一点要注意的地方,前面提到编码是以3个字节为单位,当剩下的字符数量不足3个字节时,则应使用0进行填充,相应的,输出字符则使用“=”占位,因此编码后输出的文本末尾可能会出现1至2个“=”。2.5 本章小结本章中介绍了SMTP协议和POP3协议的基本概念以及他们的原始命令字。在众多的网络安全开发包中,之所以选用LIBNIDS开发包,是因为它提供了TCP数据流的重组,免去了分解数据包以及对数据包重组的工作量,利用L
42、IBNIDS可以直接获取到数据包中内容。本章对编程中用到的LIBNIDS的数据结构和函数进行了介绍,为后边章节奠定了基础。对于将二进制序列转换为可读的ASCII码的Base64编码,在本章中也进行了介绍,以后章节中需要用到Base64编码对含有汉字的邮件字段进行还原。第3章 邮件监控子系统构成和框架3.1 引言邮件监控子系统是网络监控系统的一个子系统,它的目的是监控被监视的计算机收发邮件的内容,这些内容包括邮件的发件人、收件人、抄送人、主题、日期、内容和附件名称。邮件监控子系统是一个综合的系统,该系统由三个模块组成,它们分别是基于SMTP协议的邮件还原程序,基于POP3协议的邮件还原程序和在监
43、视端进行监视的软件。它们的功能,以及它们之间的联系,会在本章中进行详细的介绍。3.2 模块组成作为网络监控系统的子系统,邮件监控也具有重要的意义,它监视了计算机中的文件通过邮件附件的形式向外发送的情况,不仅如此,它还记录了使用邮件客户端进行收发邮件的信息,并将收发到的邮件进行相关信息的提取,写入邮件日志文件。图3-1 邮件监控子系统的模块组成邮件监控子系统是由多模块组成的系统,如图3-1所示,它的三个模块分别是基于SMTP协议的邮件还原程序,基于POP3协议的邮件还原程序和在监视端进行监视的软件。它们之间是相互独立的,基于SMTP协议的邮件还原程序、基于POP3协议的邮件还原程序和监视端软件分
44、别完成自己的分工。其中基于SMTP协议的邮件还原程序完成还原客户端发送的邮件的还原,把邮件的发件人、收件人、抄送人、主题、日期、内容和附件名称提取并写入日志文件;基于POP3协议的邮件还原程序完成客户端接收邮件的还原,把邮件的发件人、收件人、抄送人、主题、日期、内容和附件名称提取并写入日志文件;监视端软件主要完成在监视端查看被监视计算机中邮件日志的文件,它还具有添加被监视的计算机、删除被监视的计算机、刷新日志、保存日志的功能。基于SMTP协议的邮件还原程序名称为“SMTPCap.exe”,它是使用VC+ 6.0编写的控制台程序,运行时隐藏了控制台,只能在进程列表中找到它的进程。它把邮件的发件人
45、、收件人、抄送人、主题、日期、内容和附件名称提取并写入日志文件,它产生的日志文件的格式如图3-2所示。图3-2 SMTPCap.exe产生日志文件的格式基于POP3协议的邮件还原程序名称为“POP3Cap.exe”,它也是使用VC+ 6.0编写的控制台程序,运行时也隐藏了控制台,只能在进程列表中找到它的进程。它把邮件的发件人、收件人、抄送人、主题、日期、内容和附件名称提取并写入日志文件,它产生的日志文件的格式如图3-3所示。监视端软件使用Microsoft Visual Studio 2008环境开发,使用C#编写。它的运行效果如图3-4所示。它主要有五个控件组成,包括显示邮件日志的webBr
46、owser控件、显示被监视计算机列表的treeView控件、显示连接状态的label控件、菜单menu控件和计时器timer控件。其中的menu控件与菜单关联,实现相应的功能,timer控件用来计时刷新邮件日志。显示被监视者列表的treeView控件在程序启动时动态加载数据库中的监视者数据而显示到控件中;显示邮件日志的webBrowser控件访问被监视计算机中的邮件日志文件达到监视效果;文件菜单中包括日志保存和退出菜单,管理菜单中有添加监视计算机和删除监视计算机啊菜单刷新菜单实现了监视列表和邮件日志的刷新功能,帮助中是版权信息。图3-3 POP3Cap.exe产生日志文件的格式图3-4 监视端
47、软件设计界面3.3 运行框架邮件监控子系统,它能够完成被监视计算机中邮件信息的提取还原,并能在监视端浏览被监视计算机中的邮件收发日志,工作在不同的计算机中,而且在监视端具有监视功能,在被监视端具有邮件还原的功能,它必然是一个多模块综合的系统。而且在监视端运行监视端软件,在被监视端运行邮件的还原程序。图3-3是邮件监控子系统的运行框架。邮件监控子系统在监视端和被监视端运行不同的程序,它们共同组成邮件监控子系统。图3-3 邮件监控子系统运行框架在被监视的计算机中运行基于SMTP协议的邮件还原程序SMTPCap.exe和基于POP3协议的邮件还原程序POP3Cap.exe,而在监视端只需要运行监视端软件Monitor.exe。当然,被监视的计算机如果有多个,那么,在每一个被监视的计算机中都要运行SMTPCap.exe和POP3Cap.exe。基于SMTP协议邮件的还原程序SMTPCap.exe和基于POP