计算机毕业论文,毕业论文,毕业设计 毕业论文免费检测 知网论文检测
当前位置: 骆驼论文网 > 信息安全 >

基于Windows平台的个人防火墙

时间:2011-04-11 12:43来源: 骆驼毕业论文网 作者:admin
基于Windows平台下的个人防火墙设计 摘 要 网络安全问题长期威胁着网络终端用户,需要有有效的安全工具解决这个问题,个人防火墙就是其中的一种常用的安全工具。为了实现个人防火墙软件,选用VC++ 6.0开发工具。软件系统主要包括两项工程,一是核心模块设计,

QQ交谈计算机毕业设计,毕业设计,毕业论文,计算机毕业论文

基于Windows平台下的个人防火墙设计
摘  要
网络安全问题长期威胁着网络终端用户,需要有有效的安全工具解决这个问题,个人防火墙就是其中的一种常用的安全工具。为了实现个人防火墙软件,选用VC++ 6.0开发工具。软件系统主要包括两项工程,一是核心模块设计,即DLL工程,实现了封包截获、管制动作和协议封包的解析任务,主要利用Winsock 2 SPI技术实现网络封包截获,之后利用控管规则对过往封包进行合法性检查和过滤,方法是首先利用Winsock 2 SPI技术建立winsock钩子,用它来截获winsock的调用,然后作出相应动作处理,动作处理需通过控管规则的检查后,确定socket连接是否允许通过,其中控管规则由用户层设置;二是用户模块设计,即EXE工程,实现用户界面和负责与DLL模块的通信,提供了3个主要界面,即封包监视、控管规则、控管规则设置。最后通过测试和应用,基本解决了终端用户的网络连接安全问题。

关键词: 过滤;动态连接库;Winsock 2 SPI;网络封包;协议封包
 
目录
论文总页数:25页
1 引言 1
1.1 课题背景与意义 1
1.2 设计实现的主体功能 1
1.3 本课题的研究方法 1
2 WINSOCK 2 SPI编程技术 2
2.1 WINSOCK 2 SPI基础 2
2.2 传输服务提供者 2
3 开发平台与开发工具 2
4 系统设计与模块划分 3
4.1 本课题要实现的具体功能 3
4.2 程序工作流程图 3
4.3 模块划分 4
4.3.1 模块划分原则 4
4.3.2 模块结构 4
4.3.3 模块接口定义 5
4.4 控管规则文件结构设计 6
4.4.1 控管规则文件需要存储的内容 7
4.4.2 控管规则文件结构 8
4.5 界面设计 8
4.5.1 制定界面风格 8
4.5.2 界面设计文档 8
4.6 编码规则 12
5 核心功能的代码实现 12
5.1 DLL的封包截获 12
5.2 DLL的访问控管 16
5.2.1 对服务提供者函数做管制的函数 16
5.2.2 封包处理函数 17
5.2.3 管制函数 17
5.2.4 设置函数 20
6 测试 21
结    论 22
参考文献 22
致    谢 24
声    明 25

4 系统设计与模块划分
4.1 本课题要实现的具体功能
本设计实现的具体功能如下:
1. 封包监视
(1) 提供封包监视页面。
(2) 提供清空监视列表,停止/开始监视及停止/开始滚动功能。
2. 控管规则设置
(1) 手工添加,删除及修改控管规则。
(2) 自学习添加控管规则。
(3) 控管规则中目的网络IP地址段的设置。
(4) 提供控管规则设置页面。
3. 封包过滤
(1) DLL给出设置工作模式和设置控管规则的接口函数。工作模式分为3种形式:放行所有,拒绝所有和过滤。
(2) DLL根据工作模式和控管规则对过往封包进行过滤。
(3) DLL将通过的网络封包通知EXE取走 。
4.2 程序工作流程图
Winsock 2 SPI是一个DLL程序,它工作在API和DRIVER之间,为上层应用程序提供服务。EXE与DLL构成软件的主题,也是编写软件的主要工作。流程图如图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一组Winsock 2SPI钩子函数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. 全局变量接口
全局变量接口是一种不提倡的方式。虽然它使用起来确实很过瘾。全局变量多了非常容易出问题。任何地方都可能会对全局变量进行赋值,变量的可控性大大降低,不知道什么时候变量的值就被莫名其妙地改掉了。当然,只要不被那些模块执行的先后顺序和循环语句弄昏头,还是可以使用全局变量的。虽然不提倡使用,但是有些地方使用全局变量与是不可避免的,而且有时候可以减少很多麻烦。使用全局变量的时候需要注意一点,读取变量的多少和位置对程序稳定性的影响并不很大,关键是尽量让赋值的地方单一,改变变量的次数和位置应尽量得到控制。
3. Windows消息接口
Windows消息接口是一种特殊的接口形式,它是基于Windows操作系统的消息机制。这种接口形式适合于应用程序之间。应用程序是相对独立的模块,如果这两个模块需要通信,则消息接口就是一种理想型的选择。这种接口类似于函数接口,只不过通过操作系统的消息机制来中转一下。Windows消息接口也是一种接口方式,特别是DLL和EXE之间经常用到。在DLL与EXE之间通信使用消息是一种优势,多个应用程序虽然调用同一个DLL,但是它们都拥有独立的模块副本。这时候如果这些模块副本都需要让同一个应用程序做一件事时,就不好处理,因为DLL的重要性和应用程序保护机制导致这些模块副本无法直接调用同一个应用程序的执行模块。这时候就可以通过消息的方式来解决。发送消息是基于窗口句柄的,只要得到这个窗口句柄,不同的DLL副本都向同一个窗口句柄发送消息,自然所有的消息都可以被同一个应用程序接收。
以上3种接口方式以函数接口为优先进行考虑,以增强模块的独立性和可读性。
4.4 控管规则文件结构设计
控管规则文件用来存储控管规则数据,命名为acl.cfg;该数据文件为二进制文件。
4.4.1 控管规则文件需要存储的内容
控管规则文件需要存储的内容如下:
(1) 系统设置
(2) 控管设置
(3) 控管规则附加数据,授权访问的远端网络IP地址记录
1. 控管规则记录结构
控管规则记录结构说明
(1) 规则编号字段是控管规则的唯一性编号。保留字段,没有使用。
(2) 应用程序名称及路径字段用来保持应用程序的名称和路径。
(3) 远端网络类型,数值的含义如下。
0:表示所有网络
1:局域网
2:约束的网络(自定义)
3:信任的网络(自定义)
4:自定义的网络(自定义)
(4) 管制动作,数值的含义如下。
0:放行
1:拒绝
(5) 进出方向,数值的含义如下。
0:出
1:入
2:双向
(6) 服务类型,数值的含义如下。
0:全部
1:TCP(端口为任意,可编辑)
2:UDP(端口为任意,可编辑)
3:FTP(端口为21,不可编辑)
4:TELNET(端口为23,不可编辑)
5:HTTP(端口为任意,可编辑)
6:NNTP(端口为119,不可编辑)
7:POP3(端口为110,不可编辑)
8:SMTP(端口为25,不可编辑)
(7) 服务端口,数值的含义如下。
0:表示全部
其他值:表示端口值

参考文献
[1] Davis Chapman(美国).学用vc++6.0[M].北京:清华大学出版社,1999年9月。
[2] 朱雁辉.Windows防火墙与网络封包截获技术[M].北京:电子工业出版社,2002年7月。
[3] 郑莉,董渊.C++语言程序设计[M].北京:清华大学出版社,2001年7月。
[4] 黎连业,张维,向东明.防火墙及其应用技术[M].北京:清华大学出版社,2004年7月。
[5] 孙鑫等.vc++深入详解[M].北京:电子工业出版社,2006年1月。
[6] 龚波.MFC技术内幕[M].北京:机械工业出版社,1999年5月。
[7] 阎慧等.防火墙原理与技术[M].北京:机械工业出版社,2004年4月。

本文内容只是论文部分简介,如需了解更多详情请咨询本站客服! QQ交谈计算机毕业设计,毕业设计,工程硕士论文,计算机毕业论文
毕业论文搜集整理:毕业论文网 计算机毕业设计 计算机毕业论文 毕业设计


顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
计算机毕业设计
计算机毕业论文
论文发表