基于Windows平台的个人防火墙设计学位论文.docx
《基于Windows平台的个人防火墙设计学位论文.docx》由会员分享,可在线阅读,更多相关《基于Windows平台的个人防火墙设计学位论文.docx(37页珍藏版)》请在冰豆网上搜索。
![基于Windows平台的个人防火墙设计学位论文.docx](https://file1.bdocx.com/fileroot1/2022-12/14/7b385442-86c1-41c4-bcee-e3344a587d72/7b385442-86c1-41c4-bcee-e3344a587d721.gif)
基于Windows平台的个人防火墙设计学位论文
学位论文
基于Windows平台下的个人防火墙设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
□优□良□中□及格□不及格
3、学生综合运用所学知识和专业技能分析和解决问题的能力
□优□良□中□及格□不及格
4、研究方法的科学性;技术线路的可行性;设计方案的合理性
□优□良□中□及格□不及格
5、完成毕业论文(设计)期间的出勤情况
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
二、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
评阅教师:
(签名)单位:
(盖章)
年月日
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
□优□良□中□及格□不及格
2、对答辩问题的反应、理解、表达情况
□优□良□中□及格□不及格
3、学生答辩过程中的精神状态
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
评定成绩:
□优□良□中□及格□不及格
教研室主任(或答辩小组组长):
(签名)
年月日
教学系意见:
系主任:
(签名)
年月日
基于Windows平台下的个人防火墙设计
摘要
网络安全问题长期威胁着网络终端用户,需要有有效的安全工具解决这个问题,个人防火墙就是其中的一种常用的安全工具。
为了实现个人防火墙软件,选用VC++6.0开发工具。
软件系统主要包括两项工程,一是核心模块设计,即DLL工程,实现了封包截获、管制动作和协议封包的解析任务,主要利用Winsock2SPI技术实现网络封包截获,之后利用控管规则对过往封包进行合法性检查和过滤,方法是首先利用Winsock2SPI技术建立winsock钩子,用它来截获winsock的调用,然后作出相应动作处理,动作处理需通过控管规则的检查后,确定socket连接是否允许通过,其中控管规则由用户层设置;二是用户模块设计,即EXE工程,实现用户界面和负责与DLL模块的通信,提供了3个主要界面,即封包监视、控管规则、控管规则设置。
最后通过测试和应用,基本解决了终端用户的网络连接安全问题。
关键词:
过滤;动态连接库;Winsock2SPI;网络封包;协议封包
TheDesignofthePersonalFirewallBasedonWindows
Abstract
Theterminalusersofnetworkarealwaysthreatenbytheproblemsofsecurityofnetwork,soweneedaeffectivetooltosolvethisproblem.Thepersonalfirewallisoneofthecommontoolsofsecurity.VC++isselectedtoimplementthepersonalfirewall.Thesystemhastwoprojectsmainly.OneoftheprojectsisthedesignofcoremodulewhichcanbecalledtheprojectofDLL.Thisprojectimplementsbehaviorsofmanagementandtheanalysisofpacketsofprotocols.ThetechnologyofWinsock2SPIisusedtocaptureofpakcetsofnetwork.Afterthat,thenthecheckingandfilteringofthepacketsaredoneusingtherulesofcontrolandmanagement.Atthebeginning,thecontrolrulesbuilduptheHookofwinsockwhichisusedtocapturethetranferofwinsock,andthenitimplementsrelativebehaviors.Thelinkofsocketwillbeornotgetthroughcheckingbytherulesofcontrolandmanagement.Therulesofcontrolandmanagementaresetbythelayerofuser.Then,weshoulddesignthemoduleofuserwhichcanbecalledtheprojectofexe.ItimplementstheinterfaceofuserandthemoduleofcommunicationwithDLL.Itprovidesthreemaininterfaces,theyarethewatchingoffilteringpacket,therulesofcontrolandmanagementandthesettingofrulesofcontrolandmanagement.Finally,ithassolvedtherequirementofsecurityofterminalusersafterthefinaltestingandapplication.
Keywords:
Filter;DLL;Winsock2SPI;Networkpackets;Protocolpackets
论文总页数:
25页
1引言
1.1课题背景与意义
目前,随着网络向各个领域的扩展,网络安全的重要性日益被人们所认知。
ISP提供商担心网络被攻击,因为这种事情发生太频繁;使用网上交易的用户担心帐户密码被盗,因为窃取密码的工具比比皆是;软件公司担心源代码泄露,就连微软也没逃脱厄运。
种种现象都表明网络安全越来越重要,这种事情随时都可能发生在我们自己身上。
这也正是网络安全快速发展的原因。
所以防火墙和防病毒软件格外的重要,也被现在的人们强烈的需要。
1.2设计实现的主体功能
现在防火墙的花样与种类繁多,让人眼花缭乱。
但是防火墙的主要功能是防止外部网络的攻击以达到保护主机的目的。
我认为哪些未知的网络IP可能对主机产生攻击可能我们都不知道。
只要试验过才知道。
所以现在防火墙一般与防病毒软件配合使用。
这样才能安全的保护主机。
实现的主要的核心功能如下定义:
1.根据应用程序访问规则可对应用程序连网动作进行过滤;
2.对应用程序访问规则具有自学习功能;
3.可实时监控、监视网络活动。
1.3本课题的研究方法
本课题由两大模块构成,分别为DLL模块和EXE模块。
首先利用Winsock2SPI技术建立winsock钩子用来截获winsock调用从而拦截TCP/IP封包,并做相应处理。
然后设置控管规则访问控制,通过控管规则的检查认证,确定socket连接是否允许通过。
最后是TCP/IP的封包分析,利用TIP/IP的封包结构分析截获的数据,提取需要的数据。
这些封装在DLL里面。
EXE模块主要是用户页面的制作。
这里介绍与DLL通信的地方。
EXE中与DLL直接通信的小模块主要有两个。
一个是完成应用程序初始化的类CPropertyApp,它继承自CWinApp,是EXE的入口,其实里面封装了WinMain函数;另一个是主窗口模块CMainFrame,这个主窗口并不是EXE显示出来的那个属性页窗口,而是一个隐藏的窗口,它继承自CMrameWnd,是一个无模式窗口,他隐藏显示,充当接受机,用来接受DLL及其他模块发送过来的消息,然后对消息进行相应的处理。
每一个连网的程序连网之前都会建立一个Socket连接。
这时钩子程序就会起作用,把截获的底层服务进行“过滤”。
及先调用自定义的函数再转给下层服务提供者函数。
我就是在这一层实现封包过滤的。
把规则与功能写到这一层。
这一层的实现是本课题的核心。
2Winsock2SPI编程技术
Winsock2是WindowsSockets的2.0版本,在此之前的版本是1.1。
与1.1版本相比,2.0版本引入了一种新的叫做SPI的编程接口。
利用这种技术可以在Socket中插入一曾层,从而可以完成诸如扩展TCP/IP协议栈,网络安全控制等功能,所以这是一个非常强大而且有用的接口,下面介绍这种编程技术。
2.1Winsock2SPI基础
Winsock是为上层应用程序提供的一种标准网络接口,上层应用程序不用关心Winsock实现的细节,它为上层应用程序提供透明的服务。
Winsock2引入的一个新的功能就是打破服务提供者的透明,让开发者可以编写自己的服务提供者接口程序,即SPI程序。
SPI以动态链接库的形式存在,它工作在应用层,为上层API调用接口函数。
Winsock2是一个接口,不是一个协议。
作为接口,它只能发现和利用底层传输协议完成通信。
自己编写的SPI程序安装到系统之后,所有的Winsock请求都会发送到这个程序并由它完成网络调用。
由于系统提供的SPI已经可以完成网络传输功能,所以自己编写的SPI没有必要重新编写这部分功能。
一般可以直接调用系统函数完成网络传输,这样工作的效果就是“钩子程序。
Winsock2SPI除了有完成网络传输的传输服务提供者,还有提供友好名称服务的名字空间服务提供者。
传输服务提供者能够提供建立通信、传输数据、流量控制和错误控制等服务。
名字空间服务提供者把一个网络协议的地址属性和一个或多个用户友好名称关联起来,这样可以起用与协议无关的名字解析方案。
2.2传输服务提供者
传输服务提供者又分为基础服务提供者和分层服务提供者。
基础服务提供者和分层服务提供者都开放相同的SPI接口,所不同的是基础服务提供者位于提供者的最底层。
所以编写基础服务提供者和分层服务提供者基本相同。
但安装是却需要将基础服务提供者安装在服务提供者加载顺序链的最底端,而分层服务提供者则根据需要分布在顺序链的中间。
3开发平台与开发工具
开发平台如题说明,以Windows平台为主,重点讨论开发工具的选择。
根据不同的工程选择不同的开发工具,可以有效地提高工作效率。
不同的开发工具各有各的优点同时又各有各的不足,在开发中要扬长避短。
目前常用的Windows开发工具有VS5.0/6.0、VS.net(包括VB、BC、VFP、VJ、C#等一组开发工具)、delphi、C++Builder,JBuilder、PB等。
在这些开发工具里面,VFP和PB一般用来专门开发数据库系统,它们具有灵活的数据库接口。
VB和Delphi既可以方便地做出复杂的数据库管理系统,又能轻松地完成操作系统级的任务。
最优秀的是很容易做出漂亮的界面。
VC和BorlandC++着重于系统编程,它们开放接口较多,也最为灵活,而且编译出的程序体积较小,所以比较适合做系统工具类软件。
缺点是短时间不容易掌握。
其中Borland使用的VCL类库是为Delphi准备的,并不是真正用C++实现的。
VJ、Jbuilder和Java语言主要面向互联网应用。
最大的优势是跨平台。
本课题为防火墙软件,较多的使用系统接口,而且界面简单。
另外,防火墙主要传播渠道是互联网,这就要求体积应尽量的小,安装尽量方便。
所以选择VC为开发工具。
4系统设计与模块划分
4.1本课题要实现的具体功能
本设计实现的具体功能如下:
1.封包监视
(1)提供封包监视页面。
(2)提供清空监视列表,停止/开始监视及停止/开始滚动功能。
2.控管规则设置
(1)手工添加,删除及修改控管规则。
(2)自学习添加控管规则。
(3)控管规则中目的网络IP地址段的设置。
(4)提供控管规则设置页面。
3.封包过滤
(1)DLL给出设置工作模式和设置控管规则的接口函数。
工作模式分为3种形式:
放行所有,拒绝所有和过滤。
(2)DLL根据工作模式和控管规则对过往封包进行过滤。
(3)DLL将通过的网络封包通知EXE取走。
4.2程序工作流程图
Winsock2SPI是一个DLL程序,它工作在API和DRIVER之间,为上层应用程序提供服务。
EXE与DLL构成软件的主题,也是编写软件的主要工作。
流程图如图1所示。
模块1.1用户界面接口
图1防火墙工作流程图
4.3模块划分
4.3.1模块划分原则
模块划分是系统分析中非常重要的一部分,下面是模块划分时的基本原则。
1.独立性:
让模块直接内的关系减到最少。
理想的状态就是模块之间没有关系,但这种情况不符合现实。
既然是同一个工程,模块之间自然都会存在一定的联系,只要想办法让模块之间的关系尽量简单就可以了。
2.接口简单化:
让模块之间的接口尽量单纯、简单、易用。
即让公用函数和公用变量尽量地少。
3.分层处理:
吸取Windows操作系统对模块做分层处理的经验。
建立一些中间模块,让两端的模块来完成相互调用的透明化。
4.容易合并:
容易将划分的模块进行合并。
例如将一个工程的各个功能模块分别设计成可执行文件,然后用一个总模块将这些模块关联起来组成一个工程。
这种情况下,对模块独立性要求较高,模块之间几乎没有任何关系。
5.可测试性:
尽量使每个模块都可以单独进行测试[2]。
上面的5条是参考原则,既然是参考原则就不会完全执行,完全按照一个教条去执行真的很困难。
只要在做模块划分的时候能经常记起这些原则,然后稍加注意就OK了。
另外,在这5条原则中,第一条是根本,能把这一条做好,下面的一些就容易实现了。
在做模块划分时一定要始终贯穿独立性的思想。
4.3.2模块结构
根据4.1节的功能定义和4.2节的工作流程图,需要对模块做进一步细化,得出更详细的模块结构。
这些模块结构是编程的蓝本,在编写代码的过程中,就要以这些结构为指导。
1.模块1.1:
用户界面,4.5节详细说明。
2.模块1.2:
EXE的安装模块,。
建立CXInstall类,C++源文件Install.h和Install.cpp。
安装函数InstallProvider和卸载函数RemoveProvider
3.模块1.3:
EXE读写控管规则模块,建立CAclFile类,C++源文件File.h和File.cpp。
读控管规则文件ReadAcl,保存控管规则文件SaveAcl,增加一条控管规则AddAcl和删除一条控管规则DelAcl。
4.模块1.4:
EXE设置DLL的控管规则模块,设置控管规则单独的函数,调用模块1.3读写控管规则模块得到控管规则数据,调用DLL的函数FloControl设置DLL的控管规则。
5.模块1.5:
EXE设置DLL的工作模式,设置工作模式单独的函数,调用模块1.3读写控管规则模块得到控管规则数据,调用DLL的函数FloControl设置DLL的工作模式。
6.模块2.1:
DLL封包过滤模块,有分为3块,2.1.1一组Winsock2SPI钩子函数C++源文件TcpipDog.h和TcpipDog.cpp;模块2.1.2根据控管规则判断是否可以通行的类CCheckAcl,C++源文件CheckAcl.h和CheckAcl.cpp;模块2.1.3对网络数据包进行分析的类CProtocolInfo,C++源文件ProtocolInfo.h和ProtocolInfo.cpp。
●模块2.1.1:
服务提供者函数模块,入口函数WSPSartup,发送询问消息到EXE,由EXE提供询问界面函数QueryAccess。
截获的8个服务提供者函数。
设置工作模式、控管规则等设备工作接口函数FloControl。
●模块2.1.2:
访问控管模块,通过检查工作模式和控管规则得到是否放行的函数GerAccessInfo。
●模块2.1.3:
协议解析模块,得到协议信息处理函数GetProtocolInfo
7.模块2.2:
DLL更改控管规则模块,设置DLL控管规则数据SetAcl,设置控管规则m_Aclfile,设置工作模式m_iWorkMode。
8.模块2.3:
DLL更改工作模式模块,设置DLL工作模式函数SetWorkMode。
4.3.3模块接口定义
模块之间接口有3种方式:
1.函数接口
函数接口是最常用而且独立性和封装性最好的接口方式。
函数之间通过参数传递进行模块之间的通信,处理过程保持相互独立,函数处理完成把处理结果返回到调用模块。
如果每个函数都有单独的接口,那么,函数多了,接口也就多了,也就越来越复杂了。
C++利用类的饿概念解决这个问题。
类可以将一组函数和变量封装起来,这样就将许许多多的函数转化成一个对象的形式。
外部模块使用这个类的实例来引用封装在里面的成员函数个变量。
把功能相似、相关的函数分成一组,然后封装在一起,使接口间的关系清晰了很多。
类的成员函数和成员变量有公有和私有之分。
对于公有函数和变量,外部模块可以直接调用;对于私有函数和变量,外部模块则不能直接调用。
利用这种特性,可以把一些只在类里面使用的函数定义为私有函数;把外部模块需要直接调用的函数定义为公有函数。
类似于DLL的导出函数(Export),这样,模块之间的直接接触就会进一步减小,独立性更进一步增加。
2.全局变量接口
全局变量接口是一种不提倡的方式。
虽然它使用起来确实很过瘾。
全局变量多了非常容易出问题。
任何地方都可能会对全局变量进行赋值,变量的可控性大大降低,不知道什么时候变量的值就被莫名其妙地改掉了。
当然,只要不被那些模块执行的先后顺序和循环语句弄昏头,还是可以使用全局变量的。
虽然不提倡使用,但是有些地方使用全局变量与是不可避免的,而