VC++Filter-Hook Driver包过滤防火墙的编程实现(5)
时间:2018-08-20 14:56 来源:毕业论文 作者:毕业论文 点击:次
2.3.2 Filter-Hook Driver简介 本文所讨论的防火墙是使用Filter-Hook Driver这种内核模式驱动(Kernel Mode Driver)开发的,下面我们就来简单介绍一下这种驱动。它只是扩展了IP过滤驱动(IP Filter Driver)的功能,可以与Ip Filter Driver互相配合,不过,我们必须了解一点,这种内核模式驱动并非是一种新的网络驱动。Ip Filter Driver是系统自带的一个驱动,它对应于ipfltdrv.sys这个驱动文件。在缺省的情况下,IP过滤驱动并不会被加载,当然我们可以手工加载Ip Filter Driver。 工作过程大体上是这样的: (1)首先,我们在Filter-Hook Driver中提供回调函数(callback); (2)其次,我们用IP Filter Driver来注册回调函数。在数据包在发送或者接收的时候,IP过滤驱动将会调用回调函数。当然这也只能够在TCP/IP协议上有效,同时,我们最多也只能够安装一个Filter-Hook Driver。而Filter-Hook Driver只有在filter-hook callback function为空时,才可以向Ip Filter Driver注册自己提供的回调函数,之后Ip Filter Driver会调用filter-hook callback function,来决定怎样去处理所接受或即将发送的IP报文。 (3)最后,当注册回调函数完成之后,IP过滤驱动会将Filter-Hook Driver对应的文件对象和回调函数相关联,确保只有一个Filter-Hook Driver能够使用。 有一点值得一提,从Windows xp系统开始以来,微软并不建议我们使用Filter-Hook Driver来实现防火墙。使用这种方法开发的防火墙仅仅能够过滤所有IP层或者以上 的通讯,对于更加低层的头部数据却无能为力,不能过滤掉以太帧数据。你需要用NDIS过滤器来实现防火墙,这样才能过滤更加低层的头部数据,但是如此一来开发难度对于初学者而言相对较大。我也曾试图使用NDIS过滤器来实现包过滤防火墙,来捕获所有链路层帧。不过由于知识不够,了解不深,实在无力继续,所以学习使用这种简单的方法来实现一个包过滤防火墙。 使用Filter-Hook Driver来实现防火墙是一种简单的方法。安装防火墙、执行过滤功能都很简单。虽然它缺少弹性,但是包过滤API却更加易于使用。例如:用户无法处理包的内容、用户无法使用包过滤API修改内容等。 综上而言,我最终决定使用Filter-Hook Driver来实现包过滤防火墙。我希望我对防火墙认识的好的开端,在对防火墙认识更深一步之后,再使用NDIS过滤器实现更高效的,完善的包过滤防火墙。 2.3.3 设计思路 总体设计思路如下: 一个程序必须具备与用户交互的功能,必须认真的考虑好用户接口部分,该部分应具备的功能应该有:用户操作功能菜单、过滤规则设置界面、规则显示界面、规则添加删除界面、规则读取界面。 功能模块构成如下所示: (1)过滤规则添加以及删除功能模块; (2)过滤规则显示功能模块; (3)过滤规则存储功能模块; (4)文件载入功能模块; (5)文件存储功能模块; (6)安装卸载功能模块; (7)数据包过滤功能模块; 2.4 功能模块构成 2.4.1 过滤规则添加以及删除功能模块 包过滤防火墙完成数据包过滤是按照一定的规则来实现的。我们要想很好地灵活实现包过滤,就得能够实现自定义规则,按照我们用户自己所定义的规则来进行包过滤。 顾名思义,这个功能模块实现的功能就是让用户能够添加或删除过滤规则。过滤规则的内容主要有:源IP地址、源IP地址的子网掩码、源端口号、目的IP地址、目的IP地址的子网掩码、目的端口号、协议的类型,还应该包含对于数据包的行为操作——通过或者丢弃。最后,要能够把自定义的规则添加到存储功能模块。 (责任编辑:qin) |