二、截获网络封装包
截获数据包是实现一个防火墙的第一步,截获数据包的方法有很多种,既可以在用户态下拦截网络数据包,又可以在核心状态下进行数据包截获。
在用户态下进行网络数据包拦截有以下几种方法:
(1)Winsock Layered Service Provider (LSP)。
(2)Windows 2000 包过滤接口。
(3)替换系统自带的WINSOCK动态连接库。
很显然,在用户态下可以很简单的进行数据包拦截,但其最致命的缺点就是只能在Winsock层次上进行,而对于网络协议栈中底层协议的数据包无法进行处理。对于一些木马和病毒来说很容易避开这个层次的防火墙。
因此大多数的个人防火墙选择利用网络驱动程序来实现的。例如用中间层驱动程序来截获数据包。
中间层驱动介于协议层驱动和小端口驱动之间,它能够截获所有的网络数据包(如果是以太网那就是以太帧)。NDIS中间层驱动的应用很广泛,不仅仅是个人防火墙,还可以用来实现VPN,NAT,PPPOverEthernet以及VLan。中间层驱动的概念是在Window NT SP4之后才有的,因此对于Windows9x来说无法直接利用中间层驱动的功能。Windows DDK提供了两个著名的中间层驱动例子:Passthru以及Mux。开发人员可以在Passthru的基础上进行开发,Mux则实现了VLan功能。目前个人防火墙的产品还很少用到这种技术,主要的原因在于中间层驱动的安装过于复杂,尤其是在Windows NT下。Windows 2000下可以通过程序实现自动安装,但是如果驱动没有经过数字签名的话,系统会提示用户是否继续安装。中层层驱动功能强大,应该是今后个人防火墙技术的趋势所在,特别是一些附加功能的实现。