WEB开发网
开发学院软件开发VC 开发Windows 2000/XP下的防火墙 阅读

开发Windows 2000/XP下的防火墙

 2006-07-20 11:40:33 来源:WEB开发网   
核心提示: 在我的实现里,过滤函数根据用户程序的要求将每个包与规则列表进行比较,开发Windows 2000/XP下的防火墙(5),这个列表是连接列表,是在运行期间用START_IP_HOOK 的IOCTL创建的,但我想这对于在研究这个或对这个有所兴趣的人们是一个好的开始,希望你能够读明白,在代码里可

在我的实现里,过滤函数根据用户程序的要求将每个包与规则列表进行比较,这个列表是连接列表,是在运行期间用START_IP_HOOK 的IOCTL创建的。在代码里可以看到这些。

源代码

在第一个版本中我只包含了简单的示例,由于许多朋友要求我帮他们开发实际应用,我完善了这个例子。新的示例是数据包的过滤程序,在这个新程序里你可以像商业防火墙一样添加你的过滤规则。

第一个版本中,应用程序由两部分组成:

(一)用户应用程序:这是管理过滤规则的MFC应用程序。程序发送规则给驱动并决定何时启动过滤,有三个步骤:

1) 定义所需的规则。可以通过添加、删除定制规则。

2) 安装规则。定义好规则后,点install按钮将他们发送给驱动

3) 启动过滤。你可以单击start按钮启动过滤

(二)Filter-Hook Driver: 根据从用户应用程序中接收到的过滤规则对数据包进行过滤。 Filter-Hook Driver必须与用户应用程序在相同的目录中。

为什么使用该方法开发防火墙

在Windows中这不是开发防火墙的唯一方法,其它的有诸如 NDIS防火墙,TDI防火墙,Winsock分层防火墙,包过滤API,...因此我将说明Filter-Hook Driver的优缺点使你在以后开发防火墙时决定是否采用这种驱动。

1) 这种方法所拥有的弹性可以使你过滤所有IP层(或以上)的通讯。但你不能过滤更低层的头部数据,例如:你不能过滤以太帧数据。你需要用NDIS过滤器来做,虽然开发困难但弹性更大。

2) 这是一种简单的方法。安装防火墙和执行过滤功能非常简单。但包过滤API(Packet Filtering API)更加容易使用,尽管它缺少弹性,例如你不能处理包的内容,你不能用包过滤API修改内容。

结论:Filter-Hook Driver不是最好但也不坏。但为什么商业产品中并不使用它呢?

答案是简单的:尽管这种驱动并不糟糕但却有巨大的缺点:像我刚才所说的,每次只能有一个过滤函数可以安装。我们开发了强大的防火墙,它可以被成千上万个用户下载,如果其它应用程序已经使用了过滤器(安装了过滤函数)那么我们的程序将不会正常工作。

这种方法的另外一个缺点是不被微软官方明文支持。虽然DDK文档上说你可以在过滤函数中处理包的内容, 但事实并非如此。你可以在接收数据包的时候处理包的内容,但在发送包的时候你仅能读IP、TCP、UDP或ICMP数据包头。我不知道这是为什么....

微软介绍在Windows XP中另外一种驱动没有这样的限制,那就是firewall hook driver。但微软不推荐使用它,因为"it ran too high in the network stack"。或许这种驱动在以后的WINDOWS版本中会消失。

结束:

好的,我知道这不是开发防火墙的最好的方法(我刚才已经提及了它巨大的缺点),但我想这对于在研究这个或对这个有所兴趣的人们是一个好的开始。希望你能够读明白,并开发出一款强大的防火墙。

上一页  1 2 3 4 5 

Tags:开发 Windows XP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接