《计算机安全技术设计》9500字_第1页
《计算机安全技术设计》9500字_第2页
《计算机安全技术设计》9500字_第3页
《计算机安全技术设计》9500字_第4页
《计算机安全技术设计》9500字_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机安全技术设计摘要:随着计算机技术和网络技术的普及和应用,网络安全越来越受到人们的重视。防火墙技术作为一种隔离内部安全网络和外部网络的防御技术,已经成为计算机网络安全体系结构的重要组成部分。在防火墙技术中,防火墙产品的使用,发现仍有对抗网络攻击的防火墙的一些缺陷,然后对于还存在的缺陷本文提出了看法并进行技术改进,以更好地保护内部网络安全的防火墙。关键词:网络安全;防火墙技术;运用目录TOC\o"1-3"\h\u16417一、绪论 121808二、计算机网络安全与防火墙技术 17166(一)计算机网络安全的威胁 1109621.非破坏性攻击 1135812.破坏性攻击 143263.操作系统存在安全隐患 2291044.恶意程序攻击 216605.系统软件漏洞和“后门” 39739(二)防火墙含义 325401(三)防火墙的关键技术 4304771.TCP/IP协议 4155242.网络数据封包过滤技术 532535(四)在计算机网络安全中防火墙技术的运用 531431三、防火墙安全网络设计与实现 62187(一)系统分析 6161191.系统设计原理 656292.系统主体功能 755683.模块划分 827881(二)IP过滤钩子驱动设计 9300211.创建过滤钩子(Filter-Hook)驱动 9161522.定义过滤列表 9214013.编写过滤函数 11123094.注册钩子回调函数 1115575(三)防火墙界面及功能设计 1580321.开始和停止过滤 17202292.安装和卸载过滤条件 1895483.文件存储 1929188结束语 2224484参考文献 23一、绪论随着社会的进步,信息时代的到来,计算机网络世界的发展和应用对人类社会的影响越来越大,越来越多的信息都从传统的媒介转移到网络上存储和传输。但随着网络技术的飞速发展,网络安全问题也越来越突出。各种网络数据信息受到越来越多恶意的破坏、更改和泄露。网络中的各种数据信息迫切需要受到保护。顺应这一趋势,涌现出了许多的网络安全技术,如防火墙、病毒检测、密码技术、身份认证等。而防火墙正是其中最主要的一种网络安全技术。一般防火墙都可以达到以下目的:一是可以限制他人进入内部网络,过滤掉不安全的服务和非法用户:二是限定用户访问特殊站点;三是为监视互联网安全提供方便。防火墙正在成为控制网络访问的非常流行的方法。目前防火墙已经在Internet上得到了广泛的应用,而且由于防火墙不限于TCP/IP协议的特点,也使其逐步在Internet之外更具生命力。客观地讲,防火墙并不是解决网络安全问题的万能药方,防火墙本身也有其局限性。目前防火墙只提供对外部网络用户的防护,对来自内部网络用户的攻击只能依靠内部网络主机的安全性。对于不经过防火墙的入侵,防火墙也是无能为力的。防火墙作为第一道安全防线,只是执行网络安全政策和策略中的一个组成部分。所以任何关键性的服务器都应放在防火墙之后。防火墙是当今网络中使用最早和使用量最大的网络安全产品。事实上,在Internet上的Web网站中,大多数Web网站都是由某种形式的防火墙加以保护的,这是对黑客防范最严、安全性较强的一种方式。二、计算机网络安全与防火墙技术(一)计算机网络安全的威胁1.非破坏性攻击攻击者只是观察某一网络的协议数据单元PDU。不干扰信息流。他理解的协议,通过观察PDU协议的计算机的地址和身份。PDU的长度和传输频率进行了研究,以了解所交换的数据的性质,也被称为被动攻击[3]。2.破坏性攻击攻击者通过连接通过一个PDU,如选择修改或删除,数据包延迟,甚至合成或伪造的PDU发送一个连接。这种攻击也被称为主动攻击。毁灭攻击分为三种类型:(1)拒绝服务攻击或删除消息:通过连接所有PDU,或者双方所有PDU被延误;(2),更多的攻击流:包括连接PDU的真实性、完整性和有序的攻击;(3)伪造连接初始化:攻击者回放先前记录的方法连接初始化序列或伪造身份并试图建立一个连接。3.操作系统存在安全隐患操作系统作为一个支持软件,使您的程序或其他应用系统在上述正常运行的环境中。操作系统提供了大量的管理功能,主要是软件资源和硬件资源的管理系统。操作系统软件本身不是安全的,系统的开发和设计又留下了漏洞,网络安全留下了隐患。1、操作系统结构的缺陷。操作系统本身有一个内存管理,管理的中央处理器,外围管理,每个管理都涉及到一些模块或程序,如果在这些程序中有一个问题,如内存管理,外部网络的一个连接的问题,只是连接一个有缺陷的模块,是可能的,计算机系统将因此崩溃。所以,一些黑客倾向于攻击操作系统不完善,使计算机系统,尤其是服务器系统立即瘫痪。2、操作系统支持在网络上发送文件,加载或安装程序,包括可执行文件,也可以带来不安全的因素。网络是非常重要的一个特点是文件传输功能,如FTP,这些安装程序经常带来一些可执行文件,这些可执行文件都是人写的程序,如果有泄漏,那么系统可能会导致崩溃。3、操作系统的安全性是其中的原因之一在于它可以创建进程,支持远程进程的创建和激活,支持在继承创建的过程中创建正确的,这些机制提供的“间谍”软件安装在远程服务器上。如果间谍软件修补一个“打”在一个合法的用户,尤其是一个“打”的特权用户,黑客/间谍软件可以使系统的过程和操作的监控程序来监视它的存在是不[4]。4.恶意程序攻击恶意程序通常被称为一个程序,意图攻击。这些威胁可以分为两类:主机程序的威胁和彼此的威胁。前者基本上不能独立于一个实际的应用程序、实用程序或系统程序片段;后者可以是操作系统的调度和运行的自包含程序。这样的攻击主要有以下几点:(1)计算机病毒:一个将“传染”程序和其他程序,“感染”是由其他程序的变化或其变种被复制到完成;(2)特洛伊木马:一个性能超越程序外定义的程序。(3)计算机蠕虫:一个通过网络通信功能将自己从一个节点到另一个节点并启动程序;(4)逻辑炸弹:一个当操作环境满足一定条件时执行其他特殊功能的程序。5.系统软件漏洞和“后门”几乎所有的网络系统存在的漏洞,这些漏洞是制度本身,如UNIX、Windows等操作系统有一定数量的漏洞。此外,用户对局域网使用盗版软件和网络管理的监督也有可能造成网络漏洞。网络攻击的破坏,影响大,难以确定,是网络质量安全的头号杀手。由于TCP/IP协议的缺陷,UDP协议是不可靠的,计算机程序错误,导致许多网络中的漏洞,但这并不是说,面对这些我们没有办法。采用严格完善的管理制度,科学有效的技术方法,可以尽可能地降低风险,做到扼杀在萌芽状态。一个管理不严,没有网络安全措施无异于居心叵测的人打开门,如果网络有问题不能完全抵抗能力。现在使用的网络软件或多或少都有一些漏洞和漏洞,而黑客可以利用这些漏洞和缺陷来攻击。此外,该软件的“后门”软件编程人员为方便自己和设置,一般不为外人所知,但一旦“后门”泄露,攻击者将很容易使用“后门”进入电脑[5]。(二)防火墙含义Internet防火墙是一个用来控制经过其上的网络应用服务和数据信息的系统。它结合了硬件和软件来防御未经受权的出入访问,目的是保护我们的网络和系统不受侵犯。它的物理载体可以简单地表现为一个路由器、主机或任何一个可提供网络安全的设备,更可以是它们的组合。在查阅的文献中,一个比较值得提及的关于防火墙的定义是:防火墙是一种将局域网和广域网分开的方法,它能限制被保护的内网与外网之间的信息存取和交换操作。防火墙可以作为不同网络或网络安全域之间交换信息的出入口,能根据企业的安全策略控制出入网络的信息流,且本身就有较强的抗攻击能力,它是提供信息安全服务,实现网络和信息安全的基础设施。在逻辑上,防火墙是一个分离器,一个限制器,也是一个分析器,有效地控制了内部网和外部网之间的活动,保证了内部网络的安全。(三)防火墙的关键技术与防火墙关键技术,一个是TCP/IP协议,一个是数据包过滤。TCP/IP是网络的基础,而数据包过滤则是防火墙要实现的主要功能。1.TCP/IP协议TCP/IP作为Internet使用的通信协议是事实上的国际标准和公认的工业标准。TCP/IP协议族是一个Internet协议系列,它包括多种其他协议,如TCP(传输控制协议)、IP(网际协议)、管理协议及一些工具性协议。TCP/IP协议族由应用层、传输层、网络层、数据链路层和物理层构成,每一层的功能由一个或多个协议实现。对每一层的协议来说,都是被它的一个或多个下层协议所支持。数据链路层和物理层的协议由底层网络定义,TCP/IP没有定义特定的协议。应用层:负责处理特定的应用程序细节。应用层包含了各种各样的直接针对用户需求的协议。每个应用层协议都是为了解决某一类应用问题,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、超文本传送协议(HTTP)等。传输层:有两种传输层的协议,传输控制协议(TCP)和用户数据报协议(UDP)。TCP和UDP都使用IP作为网络层协议,即这两个协议在发送数据时,其协议数据单元都是被封装在IP数据报中。网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)、地址转换协议(ARP)、路由信息协议(RIP)。(1)IP(网际协议)IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。IP协议提供的是一种不可靠的服务,是尽最大努力交付。IP之上可以有多个传输协议,每个协议为应用程序提供不同的服务。所有具有网络层的因特网部件都必须运行IP协议。(2)TCP(传输控制协议)如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。TCP是工作在传输层。2.网络数据封包过滤技术网络封包截获技术主要应用于过滤、转换协议和截取报文分析等。过滤型的应用最为广泛,典型的有包过滤型防火墙。Windows平台下有多种的网络数据封包截获技术。主要有用户模式和内核模式下的封包过滤技术。(1)用户模式下的网络数据过滤用户模式下过滤网络数据的方法有如下3种。(1)Winsock分层服务提供者;(2)Windows2000/XP封包过滤接口;(3)替换系统自带的Winsock动态链接库。替换系统自带的Winsock动态链接库。在引入分层服务器提供者(LSP)之前,扩展Winsock功能的唯一方法就是替换系统自带的DLL。显然,这种方法有很多缺点,其中最主要的是稳定性和兼容性问题。现在很少有人使用了。(2)内核模式下的网络数据过滤内核模式下过滤网络数据的方法有如下4种。(1)传输数据接口过滤驱动。传输数据接口(TransportDataInterface,TDI)过滤驱动。这是坐落在内核模式TCP/IP驱动之上的主要的过滤行动。(2)NDIS中间层驱动。NDIS中间层(Intermediate,IM)驱动。中间层驱动介于协议层驱动和微端口驱动之间,它能够截获所有的网络封包(如果是以太网那就是以太帧)。(3)Windows2000过滤钩子驱动。Windows2000过滤钩子驱动(Filter-HookDriver)。(4)网络入侵检测系统总体结构。NDIS钩子驱动(NDISHookDriver)。NDIS钩子过滤驱动截获或者说是Hook指定的NDIS导出的函数。(四)在计算机网络安全中防火墙技术的运用总的来说,计算机网络安全是通过网络管理控制,以及技术解决方案,以确保在网络环境下,保护数据的使用和保密性和完整性。计算机网络安全主要是物理和逻辑安全。但是,根据用户不一样,对网络安全的理解也不会相同。如:一般用户认为,计算机网络安全是在网络上上传自己的隐私或重要信息,保护信息不能被窃听和篡改,以及伪造。而网络厂商认为,除了保证网络信息安全外,还要考虑各种因素对网络硬件的保护,以及在存在异常的情况下恢复网络通信。1、加密技术。信息发送方信息通过密码进行加密,主接收方接收加密信息,利用解密密钥解密信息,从而完成安全信息传输。加密措施利用密钥保证信息传输安全。2、身份验证。通过使用网络用户授权,通过发送方和接收方之间的认证信息,建立信息通道相对安全的,可以有效地防止非法授权的干预。3、防病毒技术,主要涉及病毒的预防、检测和清除三个方面。首先,在网络建设中,防火墙的信息交流的网络控制之间按照一定的规则安装,构成一道安全屏障,以保护内部网络与外部网络之间的信息和数据传输,确保网络没有其他未经授权的第三方入侵。其次,如果网络连接通过路由器与互联网连接,服务器的WWW和DNS,FIP和Emai和IP地址是确定的,与网络有一个C类IP地址。那么网络首先必须访问骨干网的骨干资源来访问控制,访问服务器以外的服务。然后,为了防止非法访问窃取,在连接端口接收数据的同时,有必要检查IP地址和以太网,丢弃IP地址的数据包,并记录相关信息。实际操作的过程是:102个预置控制,当防火墙和IP和以太网地址访问一个地址属于非法访问,那么防火墙将自动接入路由器控制表变化,过滤非法IP地址,以防止外来未经授权的访问。三、防火墙安全网络设计与实现(一)系统分析1.系统设计原理拦截网络数据包,通过检查数据流中的每个数据包,根据数据包的源IP地址、目的IP地址、TCP/UDP源端口、TCP/UDP目的端口、TCP链路状态等因素或它们的组合来确定是否允许数据包通过。只有满足过滤规则的数据包才被转发至相应的目的地出口端。其余数据包则被从数据流中删除,其基本原理如图3-1所示:数据包拦截目的出口数据包处理通过数据包拦截目的出口数据包处理过滤规则库过滤钩子驱动过滤规则库过滤钩子驱动图3-1包过滤防火墙原理图2.系统主体功能1.过滤规则设置(1)手工添加、修改及删除过滤规则。(2)过滤规则中IP地址、端口号及子网掩码的设置。(3)过滤规则中进行过滤的协议的设置。(4)对符合过滤条件的数据包需采取动作的设置。(5)保存已有的过滤规则。2.过滤规则的使用(1)通过保存过滤规则将此规则添加到驱动程序中去。(2)通过删除过滤规则将此规则从驱动程序中删除掉。3.数据包过滤(1)DrvFltIp.sys给出设置工作模式和设置过滤规则的接口函数。工作模式分为两种形式:通行和丢弃。(2)根据工作模式和过滤规则对过往数据包进行过滤。防火墙这个应用由两个部分组成:用户应用程序:它是一个MFC应用程序来管理各种过滤规则。这个应用程序发送各种过滤规则到应用中并决定何时开始起动过滤。过滤动作分三步按照用户的需要定一个过滤规则。发送添加或删除命令来增加或删除这个过滤规则。保存规则。当用户定义好一个过滤规则后,按下保存按钮来发送它到驱动中。开始过滤。用户只需要按下开始按钮就可以开始过滤了。过滤驱动程序:驱动程序按照用户应用程序发来的过滤规则来过滤发送和接收到的各种数据包。3.模块划分防火墙的结果模块图主要功能模块,如表3-1所示:表3-1主要模块结构主要功能开始/停止开始过滤停止过滤添加/删除添加过滤规则删除过滤规则过滤规则显示模块,如表3-2所示:表3-2过滤规则显示模块结构过滤规则显示模块建立CFirewallDlg类C++源件CFirewallDlg.h和CFirewallDlgcp设置过滤规则显示列表函数OnInitDialog更新过滤规则显示列表函数Updteist添加过滤规则到显示列表函数AddRuleToList数据包过滤模块,如表3-3所示:表3-3主数据包过滤结构数据包过滤模块C源文件DrvFltIp.h和Driver.cpp过滤规则接口函数AddFilter及DelFilter工作模式接口函数cbFilterFunction(二)IP过滤钩子驱动设计过滤钩子(Filter-Hook)驱动是用来过滤网络封包的内核模式驱动,它扩展了系统提供的IP过滤驱动的功能。1.创建过滤钩子(Filter-Hook)驱动过滤钩子驱动是内核模式驱动程序,它实现一个钩子过滤回调函数,并用系统提供的IP过滤驱动注册它。这个回调函数就是过滤钩子。IP过滤驱动随后使用这个过滤钩子来决定如何处理进出的封包。当注册过滤钩子入口地址时,只要将程序中这个函数的地址传递给IP过滤驱动即可。程序在过滤驱动中对到来或者出去的封包采取指定的行动。过滤钩子应该用特定的信息与IP过滤驱动传输的信息相比较,以决定如何处理封包。过滤钩子检查完封包后,它应该返回响应代码PF_FORWARD、PF_DROP或者PF_PASS,通知IP过滤驱动如何处理。·PF_FORWARD指示IP过滤驱动立即向IP堆栈返回前进响应代码。对于本地封包,IP向上送入栈。如果封包的目标是另外的机器,并允许路由。IP随即路由发送。·PF_DROP指示IP过滤驱动立即向IP堆栈返回丢弃响应代码。IP应该丢弃这个封包。·PF_PASS指示IP过滤驱动过滤这个封包,并向IP堆栈返回结果响应代码。IP过滤驱动如何进一步过滤此封包取决于封包过滤API的设置。如果过滤钩子决定不处理当前封包,而让IP过滤驱动来过滤,它应返回PF_PASS响应代码。2.定义过滤列表过滤列表是将多个过滤规则连在一起的链表,这里定义一个CFilterList结构描述它。//过滤列表structCFilterList{ CIPFilteripf; //过滤规则 CFilterList*pNext; //指向下一个CFilterList结构};CFilterList结构实际上是向每个过滤规则中添加了指向下一个规则的pNext指针,这样多个过滤规则连在一起就形成过滤列表,只要记录下整个表的首地址即可管理它。在DrvFltIp.cpp文件中定义全局变量g_pHeader,保存表的首地址。structCFilterList*g_pHeader=NULL;//过滤列表首地址在过滤钩子回调函授中,要遍历此过滤列表,以决定是否允许封包通过。向过滤列表中添加过滤规则时,首先申请一块CFilterList结构大小的内存,然后用正确的参数填充这块内存,最后将之连接到过滤列表中。添加过滤规则的功能由自定义函数AddFilterToList来实现。具体代码如下://向过滤列表中添加一个过滤规则NTSTATUSAddFilterToList(CIPFilter*pFilter){ //为新的过滤规则申请内存空间 CFilterList*pNew=(CFilterList*)ExAllocatePool(NonPagedPool,sizeof(CFilterList)); if(pNew==NULL) returnSTATUS_INSUFFICIENT_RESOURCES; //填充这块内存 RtlCopyMemory(&pNew->ipf,pFilter,sizeof(CIPFilter)); //连接到过滤列表中 pNew->pNext=g_pHeader; g_pHeader=pNew; returnSTATUS_SUCCESS;}清除过滤列表时,只需遍历g_pHeader指向的链表,依次释放上面申请的内存即可。清除列表的功能由自定义函数ClearFilter来实现,具体代码如下。//清除过滤列表voidClearFilterList(){ CFilterList*pNext; //释放过滤列表占用的所有内存 while(g_pHeader!=NULL) { pNext=g_pHeader->pNext; //释放内存 ExFreePool(g_pHeader); g_pHeader=pNext; }}3.编写过滤函数这里的过滤函数就是过滤钩子回调函数。当运行此程序的电脑发送或者接收封包时,钩子回调函数将会被调用。根据此函数的返回值,系统决定如何处理封包。过滤函数将每个包与列表中的规则相比较,如果符合条件就按照用户的要求,丢弃或者放行。4.注册钩子回调函数安装IP过滤驱动时,首先去取得IP过滤驱动设备对象指针,然后向这个设备发送控制代码递IOCTL_PF_SET_EXTENSION_POINTER(I/O请求包),请它注册钩子回调函数。具体来说,可以分为如下3步(1)取得IP过滤驱动设备对象指针。这个工作由IoGetDeviceObjectpointer函数来完成。(2)使用到IP过滤驱动中设备对象创建的指针IRP。为了构建此IRP,首先申请一个PF_SET_EXTENSION_HOOK_INFO对象,并用钩子回调函数的地址来填充它;然后使用KeInitializeEvent函数初始化一个事件内核对象,以同步与IP过滤驱动的交互;最后调用IoBuildDeviceIoControlRequest函数为设备控制请求申请和构建一个IRP。(3)请求IP过滤驱动安装钩子回调函数。首先调用IoCallDriver函数发送第二步构建的IRP到IP过滤驱动;然后调用KeWaitForSingleObject函数在第二步初始化的事件内核对象上等待IP过滤驱动完成注册工作。自定义函数SetFilterFunction的作用是为驱动程序注册钩子回调函数,其唯一的参数是钩子回调地址。如果为这个地址传递NULL,则是卸载已注册的钩子回调函数,代码如下。//注册钩子回调函数NTSTATUSSetFilterFunction(PacketFilterExtensionPtrfilterFun){ NTSTATUSstatus=STATUS_SUCCESS; //取得IP过滤驱动设备对象。下面代码执行后,pDeviceObj变量将指向IP过滤驱动设备对象 PDEVICE_OBJECTpDeviceObj; PFILE_OBJECTpFileObj; //初始化IP过滤驱动的名称 UNICODE_STRINGustrFilterDriver; RtlInitUnicodeString(&ustrFilterDriver,L"\\Device\\IPFILTERDRIVER"); //取得设备对象指针 status=IoGetDeviceObjectPointer(&ustrFilterDriver,FILE_ALL_ACCESS,&pFileObj,&pDeviceObj); if(!NT_SUCCESS(status)) { returnstatus; } //使用到IP过滤驱动中设备对象的指针创建一个IRP //填充PF_SET_EXTENSION_HOOK_INFO结构 PF_SET_EXTENSION_HOOK_INFOfilterData; filterData.ExtensionPointer=filterFun; //我们需要初始化一个事件对象。 //构建IRP时需要使用这个事件内核对象,当IP过滤取得接受到此IRP,完成工作以后会将它置位 KEVENTevent; KeInitializeEvent(&event,NotificationEvent,FALSE); //为设备控制请求申请和构建一个IRP PIRPpIrp; IO_STATUS_BLOCKioStatus; pIrp=IoBuildDeviceIoControlRequest(IOCTL_PF_SET_EXTENSION_POINTER,//iocontrolcode pDeviceObj, (PVOID)&filterData, sizeof(PF_SET_EXTENSION_HOOK_INFO), NULL, 0, FALSE, &event, &ioStatus); if(pIrp==NULL) { //如果不能申请空间,返回对应的错误代码 returnSTATUS_INSUFFICIENT_RESOURCES; } //请求安装钩子回调函数 //发送此IRP到IP过滤驱动 status=IoCallDriver(pDeviceObj,pIrp); //等待IP过滤驱动的通知 if(status==STATUS_PENDING) { KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL); } status=ioStatus.Status; //清除资源 if(pFileObj!=NULL) ObDereferenceObject(pFileObj); returnstatus;}下面是响应用户DeviceIoControl调用的例程DispatchIoctl。它提供了与用户交互的接口。//I/O控制派遣例程NTSTATUSDispatchIoctl(PDEVICE_OBJECTpDevObj,PIRPpIrp){ NTSTATUSstatus=STATUS_SUCCESS; //取得此IRP(pIrp)的I/O堆栈指针 PIO_STACK_LOCATIONpIrpStack=IoGetCurrentIrpStackLocation(pIrp); //取得I/O控制代码 ULONGuIoControlCode=pIrpStack->Parameters.DeviceIoControl.IoControlCode; //取得I/O缓冲区指针和它的长度 PVOIDpIoBuffer=pIrp->AssociatedIrp.SystemBuffer; ULONGuInSize=pIrpStack->Parameters.DeviceIoControl.InputBufferLength; //响应用户的命令 switch(uIoControlCode) { caseSTART_IP_HOOK: //开始过滤 status=SetFilterFunction(FilterPackets); break; caseSTOP_IP_HOOK: //停止过滤 status=SetFilterFunction(NULL); break; caseADD_FILTER: //添加一个过滤规则 if(uInSize==sizeof(CIPFilter)) status=AddFilterToList((CIPFilter*)pIoBuffer); else status=STATUS_INVALID_DEVICE_REQUEST; break; caseCLEAR_FILTER: //释放过滤规则列表 ClearFilterList(); break; default: status=STATUS_INVALID_DEVICE_REQUEST; break; } //完成请求 pIrp->IoStatus.Status=status; pIrp->IoStatus.Information=0; IoCompleteRequest(pIrp,IO_NO_INCREMENT); returnstatus;}(三)防火墙界面及功能设计Firewall程序在初始化时加载DrvFltIp驱动,用户单击开始按钮即向驱动发送START_IP_HOOK控制代码,安装过滤钩子,单击停止按钮则发送STOP_IP_HOOK控制代码清除过滤钩子;用户单击添加按钮,弹出“添加过滤条件”对话框,允许用户输入过滤规则。单击删除按钮则删除用户选定的过滤规则;用户单击安装和卸载按钮,firewall程序即向DrvFltIp驱动发送ADD_FILTER或CLEAR_FILTR控制代码,安装或者卸载过滤规则。Firewall工程中主要的类有4个:CFirewallApp、CFirewallDoc、CFirewallViw、CMainFrame。CFirewallDoc类保存了用户添加的过滤条件,也提供了操作这些数据的接口函数。CFirewallView类负责将文档对象中的数据显示给用户,并接收用户的输入。CMainFrame类主要是加载IP过滤驱动、IP过滤钩子和处理菜单命令。主界面如图3-2所示:图3-2防火墙程序主界面CMainFrame::CMainFrame(){ //确保IP过滤驱动启动(否则怎样为它安装钩子?) m_pIPFltDrv=newCDriver("IpFltDrv.sys","IpFltDrv"); m_pIPFltDrv->StartDriver(); //启动IP过滤钩子驱动 charszPath[256]; char*p; ::GetFullPathName("DrvFltIp.sys",256,szPath,&p); m_pFilterDrv=newCDriver(szPath,"DrvFltIp"); if(!m_pFilterDrv->StartDriver()||!m_pFilterDrv->OpenDevice()) { MessageBox("创建服务失败!"); exit(-1); } m_bStarted=FALSE;}CMainFrame::~CMainFrame(){ if(m_bStarted) m_pFilterDrv->IoControl(STOP_IP_HOOK,NULL,0,NULL,0); if(m_pFilterDrv!=NULL) deletem_pFilterDrv; if(m_pIPFltDrv!=NULL) deletem_pIPFltDrv;}1.开始和停止过滤要开始或者停止过滤,只需向IP过滤驱动发送START_IP_HOOK或STOP_IP_HOOK设备控制代码即可。下面是用户单击开始和停止时框架程序调用的函数。voidCMainFrame::OnFileStart() //开始过滤{ if(m_bStarted) return; //通知IP过滤驱动开始过滤 if(m_pFilterDrv->IoControl(START_IP_HOOK,NULL,0,NULL,0)==-1) { MessageBox("启动服务出错!"); return; } m_bStarted=TRUE;}voidCMainFrame::OnFileStop() //停止过滤{ if(m_bStarted) { //通知IP过滤驱动停止过滤 m_pFilterDrv->IoControl(STOP_IP_HOOK,NULL,0,NULL,0); m_bStarted=FALSE; }}2.安装和卸载过滤条件这项工作是通过向IP过滤驱动发送ADD_FILTER和CLEAR_FILTER控制代码来完成的。voidCMainFrame::OnRulesInstall() //安装过滤条件{ //首先清除过滤条件 m_pFilterDrv->IoControl(CLEAR_FILTER,NULL,0,NULL,0); //从文档对象取出数据,安装过滤条件 intnRet; CFirewallDoc*pDoc=(CFirewallDoc*)GetActiveDocument(); for(inti=0;i<pDoc->m_nRules;i++) { //转换字节顺序 CIPFilterpf; memcpy(&pf,&(pDoc->m_rules[i]),sizeof(CIPFilter)); pf.sourcePort=(USHORT)htonl(pDoc->m_rules[i].sourcePort); pf.destinationPort=(USHORT)htonl(pDoc->m_rules[i].destinationPort); //发送设备控制代码 nRet=m_pFilterDrv->IoControl(ADD_FILTER,&pf,sizeof(pf),NULL,0); if(nRet==-1) { AfxMessageBox("安装过滤条件出错!"); break; } }}voidCMainFrame::OnRulesUninstall() //卸载过滤条件{ //清除过滤条件 m_pFilterDrv->IoControl(CLEAR_FILTER,NULL,0,NULL,0);}3.文件存储Firewall程序可以将用户添加的过滤规则保存到以.rul为后缀的文件中。下面是用户单击保存过滤规则和加载过滤规则时框架程序调用的函数。voidCMainFrame::OnFileConserve() //用户单击保存过滤规则{ CFirewallDoc*pDoc=(CFirewallDoc*)GetActiveDocument(); if(pDoc->m_nRules==0) { AfxMessageBox("没有规则!"); return; } //弹出保存对话框 CFileDialogdlg(FALSE,"rul",NULL, OFN_HIDEREADONLY|OFN_CREATEPROMPT,"RuleFiles(*.rul)|*.rul|all(*.*)|*.*||",NULL); if(dlg.DoModal()==IDCANCEL) return; //写入文件 CFilefile; if(file.Open(dlg.GetPathName(),CFile::modeCreate|CFile::modeWrite)) { for(inti=0;i<pDoc->m_nRules;i++) { file.Write(&pDoc->m_rules[i],sizeof(CIPFilter)); } } else { AfxMessageBox("保存文件出错!"); } }voidCMainFrame::OnFileLoad() //用户单击加载过滤条件{ //弹出打开对话框 CFileDialogdlg(TRUE,NULL,NULL, OFN_HIDEREADONLY|OFN_CREATEPROMPT,"RuleFiles(*.rul)|*.rul|all(*.*)|*.*||",NULL); if(dlg.DoModal()==IDCANCEL) return; //读取过滤规则 CFilefile; if(file.Open(dlg.GetPathName(),CFile::modeRead)) { CFirewallDoc*pDoc=(CFirew

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论