




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I 摘要摘要 随着网络技术的飞速发展,网络安全问题也日益严重。为了应对这一趋势, 涌现出了许多网络安全产品,防火墙就是其中最早出现和使用量最大的网络安全 产品。防火墙是在两个网络之间实现访问控制的一个或一组软件或硬件系统,是 一种非常有效的网络安全技术。防火墙按技术划分为:“包过滤型”和“应用代 理型”两大类。所有基于Windows操作系统的个人防火墙核心技术在于网络数据 包过滤技术。 数据包过滤技术就是对通信过程中的数据通过网络协议的分析进行过滤,使 符合事先规定的安全规则的数据包通过,使那些不符合安全规则的数据包丢弃。 本文介绍了基于Windows的包过滤防火墙设计与实现。 关键词:数据包过滤,网络协议,防火墙 II ABSTRACT With the rapid development of network technology, network security has become increasingly serious. In response to this trend, the emergence of a number of network security products, firewalls is one of the earliest and the largest use of network security products. A firewall is the access control between two networks one or a group of software or hardware system, is a very effective network security technology. Firewall divided by technology: packet filter type and application proxy-type two categories. All Windows-based operating system core technology is the personal firewall network packet filtering technology. Packet filtering is the process of the communication of data through the analysis of network protocol filtering, to meet the required safety rules in advance of data packets through, so that those who do not meet safety regulations discarded packets. This article describes the Windows-based design and implementation of packet filtering firewall. Keywords: Packet Filtering, Network Protocol, Firewall III 目录 摘要 .I ABSTRACT.II 第1章 引言.1 1.1 背景.1 1.2 研究内容.2 第2章 防火墙系统概述.3 2.1防火墙系统的定义.3 2.2防火墙系统的功能.3 2.3防火墙系统的分类.3 2.3.1 简单包过滤防火墙.4 2.3.2 基于状态检测的包过滤防火墙.4 2.3.3 代理服务器.4 第3章 防火墙系统相关技术.5 3.1 TCP/IP协议.5 3.1.1 IP(网际协议).5 3.1.2 TCP(传输控制协议) .5 3.1.3 UDP(用户数据报协议).6 3.1.4 ICMP(网间控制消息协议).6 3.2 网络数据封包过滤技术.6 3.2.1 用户模式下的网络数据过滤.6 3.2.2 内核模式下的网络数据过滤.7 第4章 防火墙系统设计与实现.9 4.1系统分析.9 4.1.1 系统设计原理.9 4.1.2 系统主体功能.9 4.1.3 模块划分.10 4.2 IP过滤钩子驱动设计.11 4.2.1 创建过滤钩子(FILTER-HOOK)驱动 .11 IV 4.2.2 定义过滤列表.13 4.2.3 编写过滤函数.15 4.2.4 注册钩子回调函数.18 4.3防火墙界面及功能设计.22 4.3.1 开始和停止过滤.24 4.3.2 安装和卸载过滤条件.25 4.3.3 文件存储.26 第5章 系统测试.29 5.1 防火墙使用及功能介绍.29 5.2 防火墙功能测试.30 第六章 结束语.32 致谢.33 参考文献.34 1 第第1 1章章 引言引言 1.1 背景背景 随着社会的进步,信息时代的到来,计算机网络世界的发展和应用对人类社 会的影响越来越大,越来越多的信息都从传统的媒介转移到网络上存储和传输。 但随着网络技术的飞速发展,网络安全问题也越来越突出。各种网络数据信息受 到越来越多恶意的破坏、更改和泄露。网络中的各种数据信息迫切需要受到保护 。顺应这一趋势,涌现出了许多的网络安全技术,如防火墙、病毒检测、密码技 术、身份认证等。而防火墙正是其中最主要的一种网络安全技术。 防火墙是在两个网络之间实现访问控制的一个或一组软件或硬件系统,是一 种非常有效的网络安全技术1。利用防火墙,我们可以将保护对象和Internet分 开,并在网络通信时执行访问控制。防火墙可以监控进出网络的通信量,仅让安 全的信息进入,同时将不允许的用户与数据拒之门外,最大限度地阻止网络黑客 访问自己的网络,防止他们随意更改、移动甚至删除内部网络上的重要信息。因 此,防火墙的作用是防止不希望的、未经授权的通信进出被保护的网络,利用它 可以阻止非法的连接和通信,也可以阻止外部的攻击。 一般防火墙都可以达到以下目的:一是可以限制他人进入内部网络,过滤掉 不安全的服务和非法用户:二是限定用户访问特殊站点;三是为监视互联网安全 提供方便。防火墙正在成为控制网络访问的非常流行的方法。 目前防火墙已经在Internet上得到了广泛的应用,而且由于防火墙不限于TC P/IP协议的特点,也使其逐步在Internet之外更具生命力。客观地讲,防火墙并 不是解决网络安全问题的万能药方,防火墙本身也有其局限性。目前防火墙只提 供对外部网络用户的防护,对来自内部网络用户的攻击只能依靠内部网络主机的 安全性。对于不经过防火墙的入侵,防火墙也是无能为力的。防火墙作为第一道 安全防线,只是执行网络安全政策和策略中的一个组成部分。所以任何关键性的 服务器都应放在防火墙之后。 防火墙是当今网络中使用最早和使用量最大的网络安全产品。事实上,在In ternet上的Web网站中,大多数Web网站都是由某种形式的防火墙加以保护的,这 是对黑客防范最严、安全性较强的一种方式。 2 1.21.2 研究内容研究内容 本文主要研究基于Windows操作系统的包过滤防火墙设计与实现。了解防火 墙的定义,分类以及主要的开发技术。学习了解包过滤技术,主要学习过滤钩子 驱动(Filter-Hook Driver)这种网络数据过滤技术,并以此设计实现一个包过滤防火墙。 在这学习过程中还要了解C+开发,Windows驱动开发,TCP/IP协议等技术 。 本文实现的包过滤防火墙系统中的核心部分包括: 1. TCP/IP协议中IP、TCP、UDP协议的分析。 2. 数据包的分解,数据包过滤,过滤规则管理,文件存储。 3. IP过滤钩子驱动设计 4. 利用C+编写程序的主题窗口 核心技术为:IP过滤钩子驱动利用WINDOWS系统中System32drivers目录下 的ipfltdrv.sys所提供的功能来拦截网络封包,并对封包采取指定的行动。以此来 实现包过滤防火墙的核心功能。 3 第第2 2章章 防火墙系统防火墙系统概述概述 2.1防火墙系统防火墙系统的定义的定义 所谓防火墙指的是一个由软件或硬件设备组合而成、在内部网和外部网之 间、专用网与公共网之间的界面上构造的保护屏障,是一种获取安全性方法的 形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立 起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规 则、验证工具、包过滤和应用网关4个部分组成,简单来讲防火墙就是一个位 于计算机和它所连接的网络之间的软件或硬件(其中硬件防火墙用的较少,例 如国防部以及大型机房等地才用,因为它价格昂贵)。计算机流入流出的所有网 络通信均要经过防火墙。 2.2防火墙系统的防火墙系统的功能功能 防火墙设置在不同网络或网络安全域之间,根据预先设定的安全策略对外部 屏蔽网络内部的信息、结构和运行状况,防止外部网络用户未经授权地进入内部 网络。防火墙的功能主要包括: (1)根据安全策略防止非法用户进入内部网络。 (2)监视网络的安全性,并向管理员报告检测到的网络攻击。 (3)进行网络地址转换(NAT),将有限的公有IP地址或静态地址与内部的IP 地址建立映射关系,从而缓解IP地址短缺的问题,并增强网络的安全性。 (4)VPN功能。通过VPN将企事业单位在地域上分布在各地的局域网或专有 子网有机地联成一个整体,不仅省去了专用通信线路,也为信息共享提供了技术 保障。 (5)可以阻止攻击者对计算机系统的非法访问和破坏2。 2.3防火墙系统的分类防火墙系统的分类 4 如今市场的防火墙产品非常之多,形式多样,划分的标准也比较杂。主要分 类如下: (1) 从软、硬件形式上划分:软件防火墙、硬件防火墙以及芯片级防火墙。 (2) 按技术划分:“包过滤型”和“应用代理型”两大类。 (3) 按结构划分:单一主机防火墙、路由器集成式防火墙和分布式防火墙三 种。 (4) 按应用部署位置划分:边界防火墙、个人防火墙和混合防火墙三大类。 (5) 按性能划分:百兆级防火墙、千兆级防火墙、万兆级防火墙3。 包过滤技术关注的是网络层和传输层的保护,而应用代理则关心应用层的保 护。包过滤是历史最久远的防火墙技术,从实现上又分为简单包过滤和基于状态 的包过滤两种。基于状态的包过滤和应用代理这两种技术目前是防火墙市场中普 遍采用的主流技术,但两种技术正在形成一种融合的趋势。 2.3.1 简单包过滤防火墙简单包过滤防火墙 包过滤技术是指在网络层对数据包进行分析、选择。选择的依据是系统内设 置的称为访问控制表的过滤逻辑。通过检查数据流中每一个数据包的源地址、目 的地址、端口号、协议状态等因素来确定是放行还是丢弃该数据包。 2.3.2 基于状态检测的包过滤防火墙基于状态检测的包过滤防火墙 状态检测防火墙又称动态包过滤防火墙。基于状态的包过滤防火墙在传统的 包过滤防火墙的基础上增加了对OSI第四层的支持。同时,防火墙会在自身缓存 或内存中维护者一个动态的状态表,来跟踪每一个网络会话的状态。数据包到达 时,对该数据包的处理方式将综合访问规则和数据包所处的状态进行,因而提供 了更完整的对传输层的控制能力。 2.3.3 代理服务器代理服务器 代理服务器工作于应用层,且针对特定的应用层协议,故通常也称作应用层 防火墙或应用层网关。这种防火墙的工作方式同过滤数据包的防火墙和以路由器 为基础的防火墙的工作方式稍有不同,它是基于软件的。代理的原理是彻底隔断 两端的直接通信,所有通信都必须经应用层的代理转发,访问者任何时候都不能 与服务器建立直接的TCP连接,应用层的协议会话过程必须符合代理的安全策略 的要求,这样便成功地实现了防火墙内外计算机系统的隔离。 5 6 第第3 3章章 防火墙系统防火墙系统相关技术相关技术 与防火墙相关的技术,一个是TCP/IP协议,一个是数据包过滤。TCP/IP是网 络的基础,而数据包过滤则是防火墙要实现的主要功能。 3.1 TCP/IP协议协议 TCP/IP作为Internet使用的通信协议是事实上的国际标准和公认的工业标准。 TCP/IP协议族是一个Internet协议系列,它包括多种其他协议,如TCP(传输控制 协议)、IP(网际协议)、管理协议及一些工具性协议。TCP/IP协议族由应用层 、传输层、网络层、数据链路层和物理层构成,每一层的功能由一个或多个协议 实现4。对每一层的协议来说,都是被它的一个或多个下层协议所支持。数据链 路层和物理层的协议由底层网络定义,TCP/IP没有定义特定的协议。 应用层:负责处理特定的应用程序细节。应用层包含了各种各样的直接针对 用户需求的协议。每个应用层协议都是为了解决某一类应用问题,如简单电子邮 件传输(SMTP)、文件传输协议(FTP)、超文本传送协议(HTTP)等。 传输层:有两种传输层的协议,传输控制协议(TCP)和用户数据报协议( UDP)。TCP和UDP都使用IP作为网络层协议,即这两个协议在发送数据时,其 协议数据单元都是被封装在IP数据报中。 网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目 的主机(但不检查是否被正确接收),如网际协议(IP)、地址转换协议(ARP )、路由信息协议(RIP)。 3.1.1 IP(网际协议)(网际协议) IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据 都通过端系统和每个中间路由器中的IP层在互联网中进行传输。IP协议提供的是 一种不可靠的服务,是尽最大努力交付。IP之上可以有多个传输协议,每个协议 为应用程序提供不同的服务。所有具有网络层的因特网部件都必须运行IP协议。 3.1.2 TCP(传输控制协议)(传输控制协议) 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP 层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包 括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 7 TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。 应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程 序和物理介质,最后到接收方。 面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下 使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。TC P是工作在传输层。 3.1.3 UDP(用户数据报协议)(用户数据报协议) UDP为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方 的一个信息单元。但是与TCP不同的是,UDP是不可靠的,它不能保证数据报能 安全无误地到达最终目的。SNMP(简单网络管理协议)使用了UDP协议,它工 作在传输层。 3.1.4 ICMP(网间控制消息协议)(网间控制消息协议) ICMP是IP协议的附属协议。IP层用它来与其它主机或路由器交换错误报文和 其他重要信息。尽管ICMP主要被IP使用,但应用程序也有可能访问它,如PING 是最常用的基于ICMP的服务。ICMP工作在网络层。 3.2 网络数据封包过滤技术网络数据封包过滤技术 网络封包截获技术主要应用于过滤、转换协议和截取报文分析等。过滤型的 应用最为广泛,典型的有包过滤型防火墙。Windows平台下有多种的网络数据封 包截获技术。主要有用户模式和内核模式下的封包过滤技术。 3.2.1 用户模式下的网络数据过滤用户模式下的网络数据过滤 用户模式下过滤网络数据的方法有如下3种。 (1)Winsock分层服务提供者。 Winsock分层服务提供者(Layered Service Provide,LSP)。这种方法简单易用,但是一些木马和病毒有可能越过Winsock直 接通过TDI调用内核模式TCP/IP驱动程序。不过,在大多数情况下这个限制也没 有什么关系。例如,QOS就可以实现在Winsock LSP中。 然而,检查或者管理每个封包的产品不能依赖LSP,这些产品必须在内核模 8 式下实现。 (2)Windows2000/XP封包过滤接口。 Windows2000/XP封包过滤接口。封包过滤接口使开发者可以创建和管理IP封 包的输入和输出过滤器。每个IP适配器接口可以关联一个或者多个过滤器。过滤 器包含源地址和目的地址、地址屏蔽码和端口,以及使用的协议5。不过使用封 包过滤接口的限制很多。 (3)替换系统自带的Winsock动态链接库。 替换系统自带的Winsock动态链接库。在引入分层服务器提供者(LSP)之前 ,扩展Winsock功能的唯一方法就是替换系统自带的DLL。 显然,这种方法有很多缺点,其中最主要的是稳定性和兼容性问题。现在很 少有人使用了。 3.2.2 内核模式下的网络数据过滤内核模式下的网络数据过滤 内核模式下过滤网络数据的方法有如下4种。 (1)传输数据接口过滤驱动 传输数据接口(Transport Data Interface,TDI)过滤驱动。这是坐落在内核模式TCP/IP驱动之上的主要的过滤行 动。 TDI定义了所有传输协议堆栈向上层导出的内核模式网络接口。应用程序发 送或者接收网络数据,都是通过协议驱动所提供的接口进行的。使用TDI过滤驱 动就是开发一个驱动程序来截获这些交互的接口,这就可以实现网络数据的截获 。另外,在这个层次还可以得到操作网络数据的进程的详细信息。 (2)NDIS中间层驱动 NDIS中间层(Intermediate,IM)驱动。中间层驱动介于协议层驱动和微端 口驱动之间,它能够截获所有的网络封包(如果是以太网那就是以太帧)6。ND IS中间层驱动的应用很广泛,不仅仅用于个人防火墙,还可以用来实现VPN、NA T、PPPOverEthernet以及VLan。Windows DDK提供了两个著名的中间层驱动例子 Passthru和Mux。开发人员可以在Passthru的基础上进行开发,Mux则实现了VLan 功能。中间层驱动功能强大,是今后个人防火墙技术发展的趋势所在,特别是一 些附加功能的实现 9 (3)Windows 2000过滤钩子驱动 Windows 2000过滤钩子驱动(Filter-Hook Driver)。Filter-Hook Driver是从Windows 2000所提供的一种驱动程序,该驱动程序主要是利用ipfiltdrv.sys所提供的功能来 拦截网络封包7。Filter-Hook Driver的结构非常简单,易于实现。 (4)网络入侵检测系统总体结构 NDIS钩子驱动(NDIS Hook Driver)。NDIS钩子过滤驱动截获或者说是Hook指定的NDIS导出的函数。NDIS 钩子技术在Windows 9x和Windows Me平台下非常有效和使用(因为在这些平台下安装IM驱动非常繁琐)。这个技 术在Windows 2000/XP平台下也一样有效,钩子技术和内核模式调试器使用的技术类似。 10 第第4 4章章 防火墙系统设计与实现防火墙系统设计与实现 4.1系统分析系统分析 4.1.1 系统设计原理系统设计原理 拦截网络数据包,通过检查数据流中的每个数据包,根据数据包的源IP地址 、目的IP地址、TCP/UDP源端口、TCP/UDP目的端口、TCP链路状态等因素或它们 的组合来确定是否允许数据包通过。只有满足过滤规则的数据包才被转发至相应 的目的地出口端。其余数据包则被从数据流中删除,其基本原理如图4-1所示: 通过 图图4-14-1 包过滤防火墙原理图包过滤防火墙原理图 4.1.2 系统主系统主体功能体功能 1过滤规则设置 (1) 手工添加、修改及删除过滤规则。 数据包拦截数据包处理目的出口 过滤钩子 驱动 过滤规则库 11 (2) 过滤规则中 IP 地址、端口号及子网掩码的设置。 (3) 过滤规则中进行过滤的协议的设置。 (4) 对符合过滤条件的数据包需采取动作的设置。 (5) 保存已有的过滤规则。 2过滤规则的使用 (1) 通过保存过滤规则将此规则添加到驱动程序中去。 (2) 通过删除过滤规则将此规则从驱动程序中删除掉。 3数据包过滤 (1) DrvFltIp.sys 给出设置工作模式和设置过滤规则的接口函数。工作模式分为 两种形式:通行和丢弃。 (2) 根据工作模式和过滤规则对过往数据包进行过滤。 防火墙这个应用由两个部分组成: 用户应用程序:它是一个 MFC 应用程序来管理各种过滤规则。这个应用程序发送各种过滤规则到应用中并决定 何时开始起动过滤。过滤动作分三步 按照用户的需要定一个过滤规则。发送添加或删除命令来增加或删除这个过 滤规则。 保存规则。当用户定义好一个过滤规则后,按下保存按钮来发送它到驱动中 。 开始过滤。用户只需要按下开始按钮就可以开始过滤了。 过滤驱动程序:驱动程序按照用户应用程序发来的过滤规则来过滤发送和接 收到的各种数据包。 4.1.3 模块划分模块划分 防火墙的结果模块图 (1) 主要功能模块,如表4-1所示: 表表 4-14-1 主要模块结构主要模块结构 主要功能 开始/停止 开始过滤停止过滤 12 添加/删除 添加过滤规则删除过滤规则 (2) 过滤规则显示模块,如表4-2所示: 表表 4-24-2 过滤规则显示模块结构过滤规则显示模块结构 过滤规则显示模块 建立 CFirewallDlg 类,C+源文件CFirewallDlg.h 和CFirewallDlg cpp 设置过滤规则显示列表 函数OnInitDialog 更新过滤规则显示列表 函数 UpdateList 添加过滤规则到显示列表 函数AddRuleToList (3) 数据包过滤模块,如表4-3所示: 表表4-34-3 主数据包过滤结构主数据包过滤结构 数据包过滤模块 C源文件DrvFltIp.h和Driver.cpp 过滤规则接口函数 AddFilter及DelFilter 工作模式接口函数 cbFilterFunction 4.2 IP过滤钩子驱动设计过滤钩子驱动设计 过滤钩子(Filter- Hook)驱动是用来过滤网络封包的内核模式驱动,它扩展了系统提供的IP过滤驱 动的功能。 4.2.1 创建过滤钩子(创建过滤钩子(Filter-Hook)驱动)驱动 过滤钩子驱动是内核模式驱动程序,它实现一个钩子过滤回调函数,并用系 统提供的IP过滤驱动注册它。这个回调函数就是过滤钩子。IP过滤驱动随后使用 这个过滤钩子来决定如何处理进出的封包。 创建过滤钩子就是实现一个PacketFilterExtensionPtr类型的函数8。 typedef PF_FORWARD_ACTION (*PacketFilterExtensionPtr)( IN unsigned char *PacketHeader, /封装的IP头指针 IN unsigned char *Packet, /具体封包数据,不包含IP头 IN unsigned int PacketLength, /具体封包数据的大小,不包含IP头 IN unsigned int RecvInterfaceIndex, /接收数据包的接口适配器编号 13 IN unsigned int SendInterfaceIndex, /发送数据包的接口适配器编号 IN IPAddr RecvLinkNextHop, /接收数据包的适配器IP地址 IN IPAddr SendLinkNextHop /发送数据包的适配器IP地址 ); PacketHeader参数指向的数据通常定义为IPHeader结构,它提供了封包的详细 信息。 typedef struct IPHeader UCHAR iphVerLen; / 版本号和头长度(各占4位) UCHAR ipTOS; / 服务类型 USHORT ipLength; / 封包总长度,即整个IP报的长度 USHORT ipID; / 封包标识,惟一标识发送的每一个数据报 USHORT ipFlags; / 标志 UCHAR ipTTL; / 生存时间,就是TTL UCHAR ipProtocol; / 协议,可能是TCP、UDP、ICMP等 USHORT ipChecksum; / 校验和 ULONG ipSource; / 源IP地址 ULONG ipDestination; / 目标IP地址 IPPacket; Packet参数指向去掉IP头之后的数据报,开头是一个TCP头、UDP头、或ICM P头,这要根据IP头的ipProtocol域确定9。TCP头和UDP头结构的定义如下。 typedef struct _TCPHeader USHORTsourcePort;/ 源端口号 USHORTdestinationPort; / 目的端口号 ULONGsequenceNumber;/ 序号 ULONGacknowledgeNumber;/ 确认序号 UCHARdataoffset;/ 数据指针 UCHARflags;/ 标志 USHORTwindows;/ 窗口大小 USHORTchecksum;/ 校验和 14 USHORTurgentPointer;/ 紧急指针 TCPHeader; typedef struct _UDPHeader USHORTsourcePort;/ 源端口号 USHORTdestinationPort; / 目的端口号 USHORTlen;/ 封包长度 USHORTchecksum;/ 校验和 UDPHeader; 当注册过滤钩子入口地址时,只要将程序中这个函数的地址传递给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的设置10。 如果过滤钩子决定不处理当前封包,而让IP过滤驱动来过滤,它应返回PF_P ASS响应代码。 4.2.2 定义过滤列表定义过滤列表 过滤列表是将多个过滤规则连在一起的链表,这里定义一个CFilterList结构描 述它。 15 / 过滤列表 struct CFilterList CIPFilter ipf;/ 过滤规则 CFilterList* pNext;/ 指向下一个CFilterList结构 ; CFilterList结构实际上是向每个过滤规则中添加了指向下一个规则的pNext指 针,这样多个过滤规则连在一起就形成过滤列表,只要记录下整个表的首地址即 可管理它。在DrvFltIp.cpp文件中定义全局变量g_pHeader,保存表的首地址。 struct CFilterList *g_pHeader=NULL; /过滤列表首地址 在过滤钩子回调函授中,要遍历此过滤列表,以决定是否允许封包通过。 向过滤列表中添加过滤规则时,首先申请一块CFilterList结构大小的内存,然 后用正确的参数填充这块内存,最后将之连接到过滤列表中。添加过滤规则的功 能由自定义函数AddFilterToList来实现,具体代码如下: / 向过滤列表中添加一个过滤规则 NTSTATUS AddFilterToList(CIPFilter* pFilter) / 为新的过滤规则申请内存空间 CFilterList* pNew = (CFilterList*)ExAllocatePool(NonPagedPool, sizeof(CFilterList); if(pNew = NULL) return STATUS_INSUFFICIENT_RESOURCES; / 填充这块内存 RtlCopyMemory( / 连接到过滤列表中 pNew-pNext = g_pHeader; g_pHeader = pNew; return STATUS_SUCCESS; 清除过滤列表时,只需遍历g_pHeader指向的链表,依次释放上面申请的内存 即可。清除列表的功能由自定义函数ClearFilter来实现,具体代码如下。 16 / 清除过滤列表 void ClearFilterList() CFilterList* pNext; / 释放过滤列表占用的所有内存 while(g_pHeader != NULL) pNext = g_pHeader-pNext; / 释放内存 ExFreePool(g_pHeader); g_pHeader = pNext; 4.2.3 编写过滤函数编写过滤函数 这里的过滤函数就是过滤钩子回调函数。当运行此程序的电脑发送或者接收 封包时,钩子回调函数将会被调用。根据此函数的返回值,系统决定如何处理封 包。 过滤函数将每个包与列表中的规则相比较,如果符合条件就按照用户的要求 ,丢弃或者放行,下面是函数的具体实现代码。 / 过滤钩子回调函数 PF_FORWARD_ACTION FilterPackets( unsigned char *PacketHeader, unsigned char *Packet, unsigned int PacketLength, unsigned int RecvInterfaceIndex, unsigned int SendInterfaceIndex, IPAddr RecvLinkNextHop, IPAddr SendLinkNextHop) / 提取IP头 17 IPHeader* pIPHdr = (IPHeader*)PacketHeader; if(pIPHdr-ipProtocol = 6) / 是TCP协议? / 提取TCP头 TCPHeader* pTCPHdr = (TCPHeader*)Packet; / 我们接受所有已经建立连接的TCP封包 if(!(pTCPHdr-flags / 与过滤规则相比较,决定采取的行动 CFilterList* pList = g_pHeader; while(pList != NULL) / 比较协议 if(pLtocol = 0 | pLtocol = pIPHdr-ipProtocol) / 查看源IP地址 if(pList-ipf.sourceIP != 0 continue; / 查看目标IP地址 if(pList-ipf.destinationIP != 0 continue; / 如果是TCP封包,查看端口号 if(pIPHdr-ipProtocol = 6) TCPHeader* pTCPHdr = (TCPHeader*)Packet; if(pList-ipf.sourcePort = 0 | pList-ipf.sourcePort = pTCPHdr-sourcePort) if(pList-ipf.destinationPort = 0 | pList-ipf.destinationPort = pTCPHdr- destinationPort) / 现在决定如何处理这个封包 if(pList-ipf.bDrop) return PF_DROP; else return PF_FORWARD; / 如果是UDP封包,查看端口号 else if(pIPHdr-ipProtocol = 17) UDPHeader* pUDPHdr = (UDPHeader*)Packet; if(pList-ipf.sourcePort = 0 | pList-ipf.sourcePort = pUDPHdr-sourcePort) if(pList-ipf.destinationPort = 0 | pList-ipf.destinationPort = pUDPHdr- 19 destinationPort) / 现在决定如何处理这个封包 if(pList-ipf.bDrop) return PF_DROP; else return PF_FORWARD; else / 对于其它封包,我们直接处理 if(pList-ipf.bDrop) return PF_DROP; else return PF_FORWARD; / 比较下一个规则 pList = pList-pNext; / 我们接受所有没有注册的封包 return PF_FORWARD; 4.2.4 注册钩子回调函数注册钩子回调函数 安装IP过滤驱动时,首先去取得IP过滤驱动设备对象指针,然后向这个设备 发送控制代码递IOCTL_PF_SET_EXTENSION_POINTER(I/O请求包),请它注册 钩子回调函数。具体来说,可以分为如下3步 (1)取得IP过滤驱动设备对象指针。这个工作由IoGetDeviceObjectpoin 20 ter函数来完成。 (2)使用到IP过滤驱动中设备对象创建的指针IRP。为了构建此IRP, 首先申请一个PF_SET_EXTENSION_HOOK_INFO对象,并用钩子回调函数的地 址来填充它;然后使用KeInitializeEvent函数初始化一个事件内核对象,以同步与I P过滤驱动的交互;最后调用IoBuildDeviceIoControlRequest函数为设备控制请求 申请和构建一个IRP。 (3)请求IP过滤驱动安装钩子回调函数。首先调用IoCallDriver函数发 送第二步构建的IRP到IP过滤驱动;然后调用KeWaitForSingleObject函数在第二步 初始化的事件内核对象上等待IP过滤驱动完成注册工作。 自定义函数SetFilterFunction的作用是为驱动程序注册钩子回调函数,其唯一 的参数是钩子回调地址。如果为这个地址传递NULL,则是卸载已注册的钩子回 调函数,代码如下。 / 注册钩子回调函数 NTSTATUS SetFilterFunction(PacketFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省昆明市盘龙区2024-2025学年三年级数学第二学期期末质量检测试题含解析
- 田阳县2025年小升初总复习数学测试题含解析
- 2025租房合同应该注意的事情 资料
- 2025版标准贸易合同模板
- 2025装卸设备维护保养承包合同范文
- 2025品牌连锁店合同模板
- 2025年普法知识竞赛题库及答案(共60题)
- 2025标准物业管理服务合同
- 2025年高考历史概括题解题策略
- 2025智能家居电器安装工程合同范本
- 仓储物流PPT模板
- 心得体会:好课“八要”
- 三级医院评审标准(2023年版)实施细则
- 分析化学(高职)PPT完整版全套教学课件
- 中共八大主要内容
- 完全性肺静脉异位引流
- 大念住经 排版用于打印
- 第三讲 应用语言学的理论
- GB/T 20604-2006天然气词汇
- GB/T 13803.2-1999木质净水用活性炭
- 计量器具校准记录
评论
0/150
提交评论