版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . 本科毕业论文题目Email分析技术的研究与实现学院专业班级学号学生指导教师完成日期摘 要随着互联网的迅猛发展,Email日益成为我们日常生活息交流的主要方式,正是由于这一特点使得大量恶意Email与垃圾Email的存在,如何有效管理Email成为目前的主要问题之一。本文介绍了一个基于Jmail的Email分析管理系统的设计与实现。主要完成的功能有对于恶意的屏蔽与删除、自定义恶意;根据的属性对服务器中的进行了自动分组管理方便用户查看。恶意处理的核心是根据关键字技术的,分析系统在接收到服务器(如SMTP.163.)上的客户之后并不马上提交给用户,而是先根据恶意Email的根据关键字进行查找,
2、列出一个初步判定为恶意Email的列表由用户来进行管理,用户可以对恶意进行删除、忽略等操作以提高系统的可靠性。考虑到本身固有的属性与常用软件如outlook、foxmail等在分组中的表现形式,本系统在处理自动分组时根据服务器中的基本属性,采用代码动态生成的两种分组:按时间分组与按好友分组。通过这两种方式,用户可以方便地查阅和管理这些Email。 关键词:Email;恶意;关键词查找;自动分组AbstractWith the rapid development of internet,the Email becomes the main way of information exchanges
3、 in our daily life day by day, formal because this characteristics make a great deal of malice Email and the existence of the garbage Email, how effectively manage Email to become one of the current key problems.Carries on checking to seek according to the key word while handle malice Email of and l
4、ist the credibility that the row form that first step judges to do evil idea Email is carried on a management by customer to raise system.Adopted two kinds of cents set method while handle the mail automatic grouped:On time cent set and press the friend grouped.Pass these two kinds of method, the cu
5、stomer can expediently check with manage these Emails.Key Words: Email; maliceemail; keywords searching; auto grouping46 / 50目 录1 绪论11.1 课题背景11.2 Email分析技术的研究现状11.3 本文主要研究容32.开发平台与工具简介42.1 Visual C+简介:42.2 ADO技术52.3 SQL语句简介53 需求分析与总体设计73.1系统需求分析73.2 系统功能模块图73.3 系统目标84. 具体实现94.1 数据库的创建94.2 MFC连接数据库94
6、.3 Email收取并解析124.4 恶意Email处理184.4.1恶意Email分析184.4.2恶意Email的删除224.4.3恶意Email的忽略244.4.4恶意关键字的添加254.5 Email自动分组264.5.1按时间进行分组274.5.2 按好友进行分组324.5.2 添加好友信息355. 程序调试376. 结论与展望38参考文献39致401绪论1.1课题背景自从互联网开始发展到现在,互联网已经成为经济、社会、文化、教育以与娱乐等不可缺少的一部分,其中Email与我们的日常工作生活和学习中越来越重要。 Email的出现使得收发信的速度得到看空前的提高,用传统的方式收发信件通
7、常需要数天,而通过Email收发信件往往只需要数秒,Email已经成为人们联系沟通的重要手段,给人们带来了便利。但是Email使用者在使用Email时随着时间的推移,收件箱中的会越来越多,当使用者需要查阅某个Email时,需要在查找上浪费很多时间。这造成了管理上的困难。除了使用Email在管理上存在的问题外还存在很多问题:如,目前大部分的Email是免费的,通过Email收发信件不仅有速度快的优点,还有发信方不需支付额外费用的特点。正式因为Email具有的这些特点给我们带来了很多烦恼:垃圾成为中的主流,垃圾像瘟疫一样蔓延,污染网络环境,占用大量传输、存储和运算资源,影响了网络的正常运行。业人士
8、分析:一旦垃圾占到互联网总数据流量的三分之一以上,将会造成巨大的存储需求,甚至对信息安全系统的有效性构成威胁。除了垃圾以外还有恶意和广告。通过攻击现象越来越多,破坏力也越来越强,超过80%的网络入侵者均以破坏电子系统为主要目标,对网络的信息安全造成了严重的威胁。如病毒侵犯、爆炸、被监听等安全隐患越来越严重,因此电子安全问题也越来越得到使用者的重视。在Email具有上述能够给我们带来便利但也有烦恼的特点,如何有效利用Email来提高我们的工作效率,为我们的日常生活提供极大的便利等逐渐成为人们关注的焦点,这就迫切需要一个好的Email管理系统来管理我们的。而Email管理系统是建立在Email的分
9、析之上的。本文正是研究Email分析技术的研究与实现。1.2Email分析技术的研究现状电子系统经过几十年的发展,已经形成了完善的技术体系。服务器系统在保留了电子系统最初的收发、存储等基本功能的同时,融入了最新的计算机与网络技术,使电子系统有了全新的改观。技术的发展趋势如下:(1) Web技术。随着中国Internet应用的日益普与和逐步深入,这些数字仍在不断增长。但是对于电子系统来说,单纯使用客户端程序进行的收发已经不能满足用户移动办公的需要。Web技术的出现,彻底解决了用户办公的需要,使得用户可以在任何地方使用浏览器登录服务器收发,而不用配置客户端程序。(2) 多域服务。所谓多域服务,即是
10、一台物理服务器为多个独立注册Internet域名的企业或单位提供电子的服务,在逻辑上,这些企业和单位拥有自己独立的服务器,也可以称为虚拟服务器技术。对于ISP提供商和企业集团公司来说,多域服务器的支持能力是选择服务器的一个重要考虑因素。它可以方便地扩展其横向服务能力。(3) 安全防护。现在的服务器在安全防护技术上有了较大的提高,包括数据身份认证、传输加密、垃圾过滤、病毒过滤、安全审计等的多项安全技术在服务器中都得到了很好的应用。(4) 多语言(5) 远程监控和性能调整(6) 无限的可扩展能力反垃圾技术主要包括:垃圾过滤技术、服务器的安全管理和培植技术以与对简单通信协议(SMTP)的改进研究等。
11、对过滤技术的应用和研究在推进和发展阶段主要集中在三个方面:(1) 利用热顶地址、IP或域名“黑白”进行的限制或过滤,典型应用诸如:结合DNS的实时黑(RBL)过滤,用户自定义白通道加严整的过滤方法等。(2) 基于数据挖掘技术进行的过滤研究,利用文本分类与统计算法进行垃圾检测,比较有代表性的是贝叶斯过滤器。它是以自学习、自适应和极高的准确率占据了过滤器这个领域的主导地位。其他研究包括:基于记忆信息、基于事件特征描述信息进行数据挖掘的垃圾检测方法。(3) 基于垃圾的特征分析、规则提取的规则匹配过滤方法,对这种技术的应用,SpamAssassin是个中翘楚。在电子技术越来越成熟的今天,国外还是在不断
12、的对其进行着分析研究与实现,力使其做到最完美,使恶意无所遁形,功能更强大,便捷,更大众化。在国,如网易,新浪,搜狐等大型都有为我们提供免费的;在国外,例如HOTMAIL,YAHOO等都有此功能。从表面看,无论使用境还是境外的电子,除了品牌的不同,好象并没有太大的区别,国外各大提供的服务在功能和技术上也确实比较类似,但是,业专家指出,网民使用境外电子,往往要承担一定的潜在风险。1.3本文主要研究容本文主要研究从服务器(如pop3.sohu.)上收取,将收取到的列表显示出来,当点击列表上的某一封时能够在相应的地方显示出该的正文,该部分是完成一个解析接收的过程。在收取到所有之后,接下来要做的工作就主
13、要分为两块:的自动分组与恶意的发现。2开发平台与工具简介2.1VisualC+简介:几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用Microsoft Visual C+开发系统来开发的。要用C+来开发Windows和Web上的高性能应用程序,Visual C+是效率最高的首选工具。Visual C+ 6.0在不牺牲灵活性、性能和控制力度的同时,给C+带来更高水平的生产效率。除了IntelliSense Technology(智能感应技术)和Edit and Continue(即编即调)等显著缩短开发时间的新特性外,Visual C+ 6.0还为Web开发和企业开发
14、提供更良好的支持。Microsoft Visual C+ 6.0专业版的健壮的构件开发、强大的数据库工具和完备的Internet支持将使您从中受益,创建出策略性的商务解决方案来。Visual Studio C+6.0采用一种非常巧妙的方法将原本非常复杂的Windows编程步骤封装起来,使编程人员可以轻松容易地编写Windows应用程序。Visual C+6.0是Microsoft Visual Studio6.0的一个子集,他对低版本开发程序兼容。它有如下的特点:(1) Visual C+6.0提供了用于开发Windows环境下的应用程序和简捷、快速的开发环境。利用Visual C+6.0开发
15、Windows应用程序具有很高的效率。(2) Visual C+6.0提供了MFC类,开发者只需要做少量的工作就可以得到功能齐全的Windows应用程序。与使用C和Windows SDK开发Windows应用程序相比,使用Visual C+6.0建立一个完美的Windows应用程序所花费的时间要少得多。(3) Visual C+6.0还提供了一个高度集成的工具集,使得在开发应用程序的全过程中都保证了较高的效率。集成化便于程序开发,开发者可以同时在编辑、建立、调试等不同任务之间快速切换,甚至可以同时进行。(4) 调试方便:在程序调试时,在遇到编译错误时,会在输出窗口显示出错误类型、行号与错误提示
16、等信息。在输出窗口中双击错误提示时,光标会自动指向出现错误的代码所在行应方便快速找出错误。Visual C+支持断点调试,同时也可以在调试窗口观察有关变量的值,以方便查找出有关的逻辑错误。2.2ADO技术(1) ADO的技术特点 ADO的全称是ActiveX Data Object,它是微软公司为数据库应用程序开发的新接口。ADO基于COM,提供编程语言可利用的对象,它不仅面向Visual C+,同时还提供面向其他开发工具的应用,如Visual Basic、VJ等,甚至还提供面向诸如 VBScript、JavaScript等脚本语言的应用。ADO的底层是OLE DB,不仅能访问关系数据库,也能
17、访问非关系型数据库。ADO对OLE DB的包装是相当成功的,相对于OLE DB中众多的接口来说,ADO对象模型简明扼要,没有一点多余的东西,并且其功能还要比DAO强大的多。并且可以说到目前为止,ADO是目前最快的数据库访问的中间层。(2) ADO的结构ADO模型包含了7个对象和4个集合,ADO的结构图如图2-1所示。2.3SQL语句简介SQL是一种面向数据库的通用数据处理语言规,能完成以下几类功能:提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安全控制,数据库完整性与数据保护控制。本文用到的SQL语句主要为select语句和insert语句。连接对象(Connection)错
18、误集合(Errors)错误对象(Error)属性集合(Properties)属性对象(Property)命令对象(Command)参数集合(Parameters)参数对象(Parameter)属性集合(Properties)属性对象(Property)记录集对象(Recordset)域集合(Fields)域对象(Field)属性集合(Properties)属性对象(Property)图2-1ADO的结构图3需求分析与总体设计3.1 系统需求分析的自动分组主要是为了管理方便,查阅方便,以节省用户宝贵的时间。在实现自动分组时用户可以输入好友信息,以便好友发过来的Email可以分到一起,这对与查找节
19、省了很多时间,同时也提供了极大的方便。在进行Email来源分组时,分组信息是根据用户输入的好友与Email地址自动生成。出来根据Email来源进行分类外,本文还研究通过时间作为条件来进行分类,比如说将分为:今天收到的Email、昨天收到的Email、更早收到的Email。恶意的发现是为了提高安全性的,可过滤一些用户认为是垃圾的Email,用户可以根据收到的Email,点击相应的菜单来启动对Email进行分析的过程。通过查找相应的关键字列出垃圾列表,用户可以根据所列出的垃圾列表进行操作:如删除该Email或忽略对该Email为垃圾的忽略。因为有些对于用户来说是非常重要的而被误判为垃圾Email的
20、情况发生。就像有些杀毒软件会误把一些系统文件或一些用户自己有文件误报为病毒一样。这样做是为了在经过用户确认的前提下从服务器中删除,进一步提高可靠性和安全性。3.2系统功能模块图系统功能模块图如图3-1所示。由该图可以看出本系统包含了3个大的功能模块:Email接收并解析,恶意Email的发现,Email自动分组。其中恶意Email的发现包括了关键字的添加,该恶意Email的删除,该恶意Email的忽略三个小的功能模块。Email自动分组中包括了按Email来源分组,按Email接收到的时间分组,好友信息的添加3个小的功能模块。图3-1 系统功能模块图3.3系统目标本文所设计的Email分析系统
21、要能够实现Email的接收并解析,恶意Email的发现与发现后的处理,Email 的自动分组。并且这些功能要能够有很好的扩展性,为了达到扩展性的要求,本文从以下几个方面进行设计:恶意的关键字可以手动添加,添加完成之后保存于数据库中以便用户在下次实用时不需要重复输入关键字进行扫描。对于扫描到的恶意Email,由用户来执行相应的操作:删除该Email或忽略该Email为恶意Email的警告,以免系统自动进行操作时删除用户重要的Email。好友信息可由用户添加,好友信息存入Access数据库中,这样用户只需输入一次好友信息即可并且当用户增加一个好友信息时能够动态生成好友并将该好友发过来的Email自
22、动放入该分组当中,便于用户的查找与阅读。Email分组还提供另外一种分组:按时间分组,以方便用户按时间段来查找,这样也可以节省用户查找Email的时间,提高了用户的效率。本系统用VC开发,连接数据库采用ADO方式与Access进行连接。4具体实现4.1 数据库的创建本系统采用Access数据库来存储相关信息,建立数据库的过程如下:在工程所在目录下点击鼠标右键,在弹出的快捷菜单中将鼠标移到“新建”,再在弹出的字菜单中点击“新建Microsoft Office Access 应用程序”。到此数据库就建立好了,将改Access文件改名Email.mdb。数据库表格的建立:本系统中数据库主要是用于存储
23、恶意Email判断的关键字信息与好友信息。本系统建立两表:keyword表和emailbook表。(1) keyword表只包含一个字段keyword,设计如表4-1所示。表4-1 关键字表keyword字段含义字段名数据类型说明关键字keyword文本(2) emailbook表包含两个字段:name和email,其中name是好友的,email为好友的email地址。设计如表4-2所示。表4-2 用户信息表(通信录表)emailbook字段含义字段名数据类型说明name文本Email地址email文本4.2MFC连接数据库本系统在进行数据库连接时采用的是ADO方式进行连接。ADO(Acti
24、veX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。ADO数据库开发的基本流程,它的基本步骤如下:(1) 初始化COM库,引入ADO库定义文件(2) 用Connection对象连接数据库(3) 利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。(4) 使用完毕后关闭连接释放对象。接下来
25、详细介绍连接过程:COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp:InitInstance()的重载函数中完成,代码:BOOL CADOTest1App:InitInstance()AfxOleInit();. (2) 用#import指令引入ADO类型库为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:#import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF","a
26、doEOF")这一语句的作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C+头文件来定义ADO库。开发环境中msado15.dll不一定在这个目录下,要按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。(3) 创建Connection对象并连接数据库为了首先
27、我们需要添加一个指向Connection对象的指针_ConnectionPtr m_pConnection,下面的代码演示了如何创建Connection对象实例与如何连接数据库并进行异常捕捉:BOOL CADOTest1Dlg:OnInitDialog()CDialog:OnInitDialog();HRESULT hr;Tryhr = m_pConnection.CreateInstance("ADODB.Connection");/创建Connection对象if(SUCCEEDED(hr)hr = m_pConnection->Open("Provid
28、er=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);/连接数据库/上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,/需要改为:Provider=Microsoft.Jet.OLEDB.3.51;catch(_error e)/捕捉异常CString errormessage;errormessage.Format("连接数据库失败!rn错误信息:%s",e.ErrorMessage();Afx
29、MessageBox(errormessage);/显示错误信息在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的。 (4) 执行SQL命令并取得结果记录集为了取得结果记录集,我们定义一个指向Recordset对象的指针:_RecordsetPtr m_pRecordset;并为其创建Recordset对象的实例: m_pRecordset.CreateInstance("ADODB.Recordset"),SQL命令的执行可以采用多种形式,本文采用了Recordset对象进行查询取得记录集。m_pRecordset->Open(SQL语句
30、,_variant_t(IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);插入操作采用的是Connection对象的Execute方法执行SQL命令。Execute()方法的原型如下所示:RecordsetPtr Connection15:Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数,
31、参数Options表示CommandText中容的类型,Options可以取如下值之一:adCmdText表明CommandText是文本命令;adCmdTable表明CommandText是一个表名;adCmdProc表明CommandText是一个存储过程;adCmdUnknown表明CommandText容未知。Execute()函数执行完后返回一个指向记录集的指针。(5) 关闭记录集与连接 记录集或连接都可以用Close()方法来关闭:m_pRecordset->Close();/关闭记录集m_pConnection->Close();/关闭连接本系统在设计对Access进
32、行操作时为了方便将上述操作写成了一个类。4.3Email收取并解析本文所研究的Email分析技术的研究与实现,在实现收取时,用到了一个动态库:jmail.dll。该动态库封装了对相关的操作。jmail常用的一些方法与属性如下:Body : String :信件体,正文,可使用AppendText追加容 。如:JMail.Body = "Hello world" ErrorCode : Integer :如果JMail.silent设置为true,ErrorCode包含的是错误代码 。如:Response.Write( JMail.ErrorCode ); ErrorMess
33、age : String :如果JMail.silent设置为true,包含的是错误信息 。如:Response.Write( JMail.ErrorMessage )。Priority : Integer :优先级. 围在1-5之间 ,1 高优先级. 有些程序称之为紧急 ;2 也是高优先级 ;3 普通优先级 ;4 低优先级 ;5 最低的优先级 。如:JMail.Priority = 3 ServerAddress : String :指定服务器的地址。可以指定多个服务器,用分号点开。可以指定端口号。如果serverAddress保持空白,JMail会尝试解决远程服务器,然后直接发送到服务器上
34、去。如:JMail.ServerAddress = " :2500" Close() :强制JMail关闭缓冲的与服务器的连接 ,如:JMail.Close(); 要接收某个的Email,我们首先要连接至该服务器,这需要我们输入用户名和密码与服务器地址。系统运行时主界面如图4-1所示图4-1 Email分析系统主界面连接服务器时用到的方法为:Connect(),该方法有几个参数:用户名(用户ID),用户密码,服务器地址,服务器端口号,接收的服务器端口号一般为110号端口。在连接服务器并收取Email时,用户在输入有关信息时有可能会在前面或后面带上空格,我们必须过
35、滤这些空格,否则的话会出现服务器地址输入错误或者用户名或密码输入错误。这样用户会觉得自己没有输错而怀疑我们的系统有问题,为了避免这种错误我们应该在获得用户输入的上述信息之后进行过滤操作。在用户使用过程当中也有可能会出现这种情况:用户没有输入用户名就点击了接收按钮,这样的操作是不允许的,因为在没有输入用户名的情况下,系统根本不知道从哪里接收Email。我们必须加一个判断条件看用户是否输入了用户名,在用户没有输入用户名的条件下不允许用户收取Email。同样的道理用户很有可能会忘记输入服务器地址,没有输入该信息系统根本不知道从哪个服务器中接收,这时我们也必须加一个判断条件,以减少系统出错的概率,让我
36、们的系统更加健壮。在用户接收Email时,用户可能会连续两次点击接收,我们应该只在列表空控件中显示最新的信息,而不应该有重复的信息出现,所以我们必须在点击接收按钮的一开始要清空信息控件中所有的信息。此外,在接收完时也必须释放信息指针,但此时不能关闭连接,因为在后面的恶意Email的删除中是要用到该连接指针的,但是如果不关闭连接的话,再次点击接收按钮时会出现错误(非法操作),因为此时连接是打开的,再次打开是不允许的。解决方法如下:在进行打开前先判断连接是否是打开的,若是打开了的,则先关闭该连接,若没有打开则直接创建连接就可以了。在接收时的连接在其他的类中要用到,此时必须定义一个类的共有成员来指向
37、该指针,只有这样在删除时才能够用该连接指针。本系统中出来要删除恶意以外,其他的操作基本上都是对Email的只读操作,在进行只读操作时,用集合类来操作更为方便快捷,该集合类的每一项存储的是一个类的一个指针。该类是一个信息类,主要包括Email的来处,Email的主题,Email接收到的时间,Email的正文,该Email的索引号(用于删除时的一个参数)这五个成员变量,这五个成员变量出来了Email的索引号之外都是字符串类型的变量,索引号是一个长整型的数。在遍历每封Email的同时把这些Email都存储到集合类当中。在收取了所有的Email的时候,同时在集合类当中存储了所有的信息。同时也要让的一些
38、信息显示出来如:主题,来源,时间等,以便用户查阅。连接并收取的代码如下:UpdateData();m_strMailServer.TrimLeft();m_strMailServer.TrimRight();m_strUserid.TrimLeft();m_strUserid.TrimRight();m_strPassword.TrimLeft();m_strPassword.TrimRight();if(m_strMailServer.GetLength() <= 0)AfxMessageBox("服务器不能为空");return;if(m_strUserid.Ge
39、tLength() <= 0)AfxMessageBox("不能为空");return;m_ctlMessagesList.DeleteAllItems();/ 清空列表m_strBodyArray.RemoveAll();theApp.messageArray.RemoveAll();tryjmail:IPOP3Ptr pPOP3("JMail.POP3");jmail:IMessagesPtr pMessages;if(p!=NULL)p->Disconnect();/ 超时 30秒pPOP3->Timeout = 30;/ 连接服
40、务器pPOP3->Connect(LPCTSTR)m_strUserid,(LPCTSTR)m_strPassword, (LPCTSTR)m_strMailServer, 110);p=pPOP3;/给类的成员指针赋值,以便其他类能够调用该连接指针pMessages = pPOP3->Messages;/ 已下载的的实际个数(因为第0个ITEM是未用的,所以减1)long lCount = pMessages->Count - 1;CMessages * EMail_Messages;if(lCount = 0)AfxMessageBox("信箱为空")
41、;elsejmail:IMessagePtr pMessage;/ 遍历每封信for(long i = 1; i <= lCount; i+)pMessage = pMessages->Itemi;_bstr_t bstrFrom = pMessage->From;_bstr_t bstrSubject = pMessage->Subject;_bstr_t bstrBody = pMessage->Body;COleDateTime oleDate = pMessage->Date;/-将接收到的存储到全局的集合类变量中,以便日后使用EMail_Messa
42、ges = new CMessages (const char*)bstrFrom,(const char*)bstrSubject,(const char*)oleDate.Format("%Y-%m-%d"),(const char*)bstrBody,i);theApp.messageArray.Add(EMail_Messages);/-将信息添加到列表框控件中int nListItem = m_ctlMessagesList.InsertItem(i, (const char*)bstrFrom);m_ctlMessagesList.SetItem(nListIt
43、em, 1, LVIF_TEXT, (const char*)bstrSubject, 0, 0, 0, NULL);m_ctlMessagesList.SetItem(nListItem, 2, LVIF_TEXT, (const char*)oleDate.Format("%Y-%m-%d"), 0, 0, 0, NULL);m_strBodyArray.Add(const char*)bstrBody);pMessage.Release();catch(_error e)CString strErr;strErr.Format("错误信息:%srn错误描述:
44、%s", (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description();AfxMessageBox(strErr);接收部分流程图如图4-2所示:图4-2 接收部分流程图在接收了所有的之后,用户在列表当中点击某个Email的时候,必须要显示出的正文供用户阅读。要实现此功能就要添加一个消息处理函数,这个消息处理函数是针对列表框控件的,即当选中某项时就必须发出一个相应的消息,通过消息路由在相应的消息处理函数中进行处理,该消息处理函数完成的功能就是在正文文本框当中显示出的正文。该消息处理函数代码如下:/-/显示正文/-void CEmailAnal
45、yseSystemDlg:OnShowBody(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;POSITION pos = m_ctlMessagesList.GetFirstSelectedItemPosition();if(pos)int nItem = m_ctlMessagesList.GetNextSelectedItem(pos);m_strBody = m_strBodyArray.GetAt(nItem);UpdateData(FALSE);*pResult =
46、0;4.4恶意Email处理恶意已经成为威胁用户安全的主要形式之一,如何能够做到与时发现恶意并由用户进行相应的操作已经成为Email使用者广泛关注的问题,同样也是一个亟待解决的问题之一。恶意Email的处理包括两个部分:恶意Email的删除与忽略。4.4.1 恶意Email分析本文在进行恶意Email分析采用的是关键字分析方法,和现在一些常用的方法一样,将关键字存储于文件或数据库中,当要分析Email时就从数据库或文件当中逐个取出关键字并与待分析文件进行比较,看待分析文件当中是否含有取出来的关键字,若含有该关键字则初步判定该文件为恶意文件或恶意Email,当然,不可能一次性就能够列出所有的关键
47、字,况且关键字是会变化的,在此时大部分的分析系统中包含了此关键字,导致某恶意Email发送者发送的被接收方认定为恶意Email。此时恶意Email发送放就会想方设法地变换关键字,设法将该顺利地到达接收方。为了增强系统在此方面的可扩展性,本文提出了一种将关键字存储与数据库的方法,用户可以随时增加关键字,当然这些关键字不是绝对的,只是用户认为的含有这些关键字的Email为恶意Email。通过上述方法来查找恶意Email的话可能会出现对于接收方来说发过来的Email是很重要的,所以系统不能在判断出恶意之后就直接删除之。若是直接删除,对于用户来说可能是很大的损失。所以我们应该把删除权交给用户,我们列出
48、的垃圾/恶意Email列表只给用户做一个参考,由用户来看Email的来源、主题等做出正确的判断,有用户决定是否删除该。恶意分析(扫描)过程如下:当点击“分析”按钮时,系统从存储的所有信息的集合类当中逐条取出每个成员,即每封Email,再对每封Email进行分析。对每封Email进行分析过程如下:从数据库中逐条取出关键字,将每个关键字和Email的主题与正文进行匹配,看在Email的主题和正文当中是否含有这些关键字,若找到其中一个,则初步认定该Email为恶意Email并立即结束该Email的查找,转入下一封Email的查找。直到所有的Email都分析完成。在分析过程中没查找到一个恶意Email
49、就将该Email的来源、主题、时间等信息显示在相应的Email列表框控件上。在进行分析时,为了让用户明确知道现在分析的是哪一封Email,在对话框的最下面会显示进度,效果如图4-3所示:图4-3 分析恶意Email效果图分析部分的代码实现如下:/-分析是否为垃圾void CTRASHMAILPROCESS:OnAnysis() / TODO: Add your control notification handler code here/-初始化相关变量与控件int trashnum=0;CString strTrash;trasharray.RemoveAll();m_trashMessag
50、eList.DeleteAllItems();/-信箱中没有if(theApp.messageArray.GetSize()=0)AfxMessageBox("信箱为空");return;CString strState;SetDlgItemText(IDC_STATE2,"正在扫描:");/显示正在扫描for(int i=0;i<theApp.messageArray.GetSize();i+)/一次扫描每封strState=(CMessages *)theApp.messageArray.GetAt(i)->strSubject;/正在扫
51、描的主题SetDlgItemText(IDC_STATE,strState);/显示正在扫描的的主题/-从数据库中选出所有的关键字_RecordsetPtr m_pRecordset;m_pRecordset=access.ReadDataBase("select * from keyword");CString strKeywords;m_pRecordset->MoveFirst();/-依次检查的主题和正文中是否含有关键字,若有则为垃圾while(!m_pRecordset->adoEOF)strKeywords=(LPCTSTR)(_bstr_t)m_p
52、Recordset->GetCollect("keyword");if(CMessages *)theApp.messageArray.GetAt(i)->strSubject.Find(strKeywords)!=-1| (CMessages *)theApp.messageArray.GetAt(i)->strMessageBody.Find(strKeywords)!=-1)/-将垃圾显示在垃圾列表中int nListItem = m_trashMessageList.InsertItem(trashnum,(CMessages *)theApp.m
53、essageArray.GetAt(i)->strFrom);m_trashMessageList.SetItem(nListItem, 1, LVIF_TEXT, (CMessages *)theApp.messageArray.GetAt(i)->strSubject, 0, 0, 0, NULL);m_trashMessageList.SetItem(nListItem, 2, LVIF_TEXT,(CMessages *)theApp.messageArray.GetAt(i)->strTime, 0, 0, 0, NULL);trashnum=trashnum+1;
54、/垃圾数/-将垃圾的索引号保存以便以后删除或忽略strTrash.Format("%d",(CMessages *)theApp.messageArray.GetAt(i)->index);trasharray.Add(strTrash);break;/找到第一个关键字就退出该Email的查找,直接进入下一个Email的查找m_pRecordset->MoveNext();Sleep(80);/-显示扫描完成的信息SetDlgItemText(IDC_STATE2,"扫描完毕!");CString info;/扫描信息info.Format(
55、"共检测到%d封恶意",trashnum);SetDlgItemText(IDC_STATE,info);在查找到恶意Email的同时,应该把恶意信息保存起来,以便删除与忽略时使用:在删除是要知道待删除Email的索引号,并且在删除该Email之后要将该信息从所有的列表集合类中删除该成员,并且要在恶意信息中删除该Email的相关信息,还要在恶意列表框控件中删除该信息。只有这样才不会在重复分析时同一封Email重复显示,也不会出现已经删除的在从新进行分析时还列出为恶意Email。分析恶意Email的流程如图4-4所示:图4-4 分析恶意Email流程图4.4.2 恶意Email的删除在经过系统分析初步认定为恶意Email后,将准恶意Email列在了恶意Email列表中,此时用户可以进行删除或则忽略操作。删除操作是用户认定该是恶意Email或垃圾Email时发生的。而忽略操作是用户认定为系统误判时用于更正系统的判断的。在删除恶意Email时不是简单地从集合类当中删除该,而是要从服务器当中删除该Email。这就要用到jmail动态库中的一个方法:DeleteSingleMessage(ID),ID是该在信息指针中的序号,该序号是从1开始的,与我们习惯的数组从0开始所不同。所以在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度厨师餐饮项目投资合作协议8篇
- 2025年度林木种植基地林业科研合作承包合同3篇
- 2024年教育科技产品代工开发合同范本3篇
- 2024版计算机技术援助及服务协议版B版
- 二零二五年度建筑用金属材料采购合同范本3篇
- 专属2024版代理合作协议模板版B版
- 二零二五年度天然气管道租赁与运营合同
- 二零二五版酒店员工福利及奖励计划合作合同范本3篇
- 2025年度海洋工程设备拆除与环保修复承包合同3篇
- 二零二五年度农民工劳动权益维护合同范本
- 2024年萍乡卫生职业学院单招职业技能测试题库标准卷
- 2024年高考数学(理)试卷(全国甲卷)(空白卷)
- DB32-T 4444-2023 单位消防安全管理规范
- 临床三基考试题库(附答案)
- 合同签订执行风险管控培训
- 九宫数独200题(附答案全)
- 人员密集场所消防安全管理培训
- PTW-UNIDOS-E-放射剂量仪中文说明书
- JCT587-2012 玻璃纤维缠绕增强热固性树脂耐腐蚀立式贮罐
- 典范英语2b课文电子书
- 员工信息登记表(标准版)
评论
0/150
提交评论