数据包过滤技术开发

时间:2022-08-05 09:05:23

数据包过滤技术开发

防火墙可以保护用户不会受到网络上面来的一些攻击的侵害,并且能保证上网用户的资料的安全。在应用程序接受到数据报前,或者在应用程序把数据报发送到网络上前,对数据包按照不同的规则进行过滤,判断数据包是否可以发送到网络上面,或者是否让应用程序接受此数据包。通过对数据包的过滤,可以阻断蠕虫对计算机的攻击和黑客软件对计算机的控制。本文对NDIS中间层和SPI两种相关技术进行详尽说明。

包过滤防火墙一般在路由器上实现,用以过滤用户定义的内容,如IP地址。包过滤防火墙的工作原理:系统在网络层检查数据包,与应用层无关。这样系统就具有很好的传输性能,可扩展能力强。但是,包过滤防火墙的安全性有一定的缺陷,因为系统对应用层信息无感知。也就是说,防火墙不理解通信的内容,所以可能被黑客所攻破。

1 NDIS中间层的相关技术说明

1)开发工具:Windows XP DDK。2)开发平台:Windows XP。

微软中间层驱动程序是在NDIS4.0和WindowsNT 4.0(SP3)中引入的新的NDIS驱动程序模型,它位于微端口驱动程序的上边界和协议驱动程序的下边界。它可以用于LBFO、包过滤、遗留驱动程序转换。在它的下边界可以是微端口驱动程序,也可以是别的驱动程序。NDIS在这之间进行转换。中间层驱动程序上面暴露出MiniportXXX函数,在它的下层,中间层驱动程序暴露出ProtocolXXX函数。上层的协议驱动程序并不知道此中间层驱动程序的存在,但是事实上,它只是一个虚拟的微端口驱动程序,并没有微端口驱动程序中的中断、端口分配的步骤。同样,尾端口驱动程序也不会知道此中间层驱动程序产生的协议的存在,它不知道上层是中间层驱动程序产生的协议驱动程序。中间层驱动程序分为两种,一种是过滤驱动程序,另一种是MUX驱动程序。

此驱动程序是中间层驱动程序中的过滤驱动程序,它可以对数据包进行过滤、加密、NAT转换。在过滤驱动程序中,一个中间层驱动程序中的上边界,对应着中间层驱动程序中的一个下边界。也就是说从一个上边界的数据都会到达和它绑定的相应的下边界。

在中间层驱动程序中还有另一种类型的中间层驱动程序,它就是MUX,它不像过滤中间层驱动程序那样一个上边界对应着一个下边界。在MUX中,一个上边界可以对应若干个下边界,同样MUX的一个下边界也可以对应若干个上边界。所以协议发送的数据包,可以发送给多个网卡,这样就可以做负载平衡和失效替换。MUX中间层驱动程序要求有一个通知对象。MUX中间层驱动程序初始化时它的绑定是由通知对象建立的设置决定的。关于更多MUX安装信息,请参考MUX中间层驱动程序安装。

2 SPI相关技术说明

1)开发工具:Visual C++。2)开发平台:Windows XP。

Winsock 2是一个接口,而不是协议,所以它可以用于发现和使用任意数量的底层传输协议所提供的通信能力。Winsock 2不仅提供一个供应用程序访问网络服务的Windows socket应用程序编程接口(API),还包含了由传输服务提供者和名字解析服务提供者实现的Winsock服务提供者接口(SPI)和ws2_32.dll。

Winsock 2的传输服务提供者是以动态链接库的形式(DLL)存在的,它是通过WSPStartup函数为上层函数提供接口,而其他的传输服务提供者函数则是通过分配表的方式来访问WS2_32.DLL。传输服务提供者的动态链接库只有在应用程序需要时才由Ws2_32.dll来装入内存中,在不需要时则会被自动卸载。

Windows socket SPI提供3种协议:分层协议、基础协议和协议链。分层协议是在基础协议的上层,依靠底层基础协议实现更高级的通信服务。基础协议是能够独立、安全地和远程端点实现数据通信的协议,它是相对于分层协议而言的。协议链是将一系列的基础协议和分层协议按特定的顺序连接在一起的链状结构。

Ws2_32.dll数据传输部分的主要功能是在服务提供者和应用程序之间提供流量管理的功能。每个应用程序通过Ws2_32.dll和相应的服务提供者进行严格的数据交换。Ws2_32.dll根据应用程序在创建套接字时所提供的参数来选择特定的服务提供者,然后把应用程序的实现过程转发,由所选创建套接字的服务提供者来管理。

Ws2_32.dll是使用标准的动态链接库来加载服务提供者接口的DLL到系统中去的,并调用WSPStartup来初始化。WSPStartup是Windows Socket 2应用程序调用SPI程序的初始化函数,也就是入口函数。WSPStartup的参数LPWSAPROTOCOL_INFOW指针提供应用程序所期望的协议信息,然后通过这个结构指针可以获得所保存的系统服务提供者的DLL名称和路径,加载系统服务提供者后查找到系统SPI程序的WSPStartup函数的指针,通过这个指针就可以将自己服务提供者的WSPStartup函数和系统SPI程序的WSPStartup函数相关联,进而调用系统的各个服务提供者函数。

3 总体设计

当发送数据包的时候,程序会根据规则对数据包进行过滤,把符合的数据包拦截下来,并通知用户数据包被拦截,并在程序的日志中记录下来。记录的内容包括数据包的协议类型,如果是ICMP数据包,则显示出数据包包含的类型号和代码;如果是TCP数据包,则显示出目的网络地址、原网络地址、目的端口号、原端口号、标致数字;如果是UDP数据包,则显示出目的网络地址、原网络地址、目的端口号、原端口号。当有进程访问网络的时候,则提示用户有进程访问网络,并询问用户此进程是否可以访问网络。如果可以,则进程可以进行网络访问,并在程序中记录下此进程可以访问网络。当第二次此进程访问网络的时候就不再通知用户,可以直接访问网络。如果用户不同意此进程访问网络的话,那么就阻断进程对网络的访问。同样也要在程序中记录下来,当第二次此进程访问网络的时候就不再通知用户,直接就让程序不能访问网络。

4 总结

本文向大家介绍Windows Socket 2的一个新特性,那就是服务提供者接口SPI(Service Provider Interface)。它不仅包括主要讲解的传输服务提供者接口,还包括名字空间服务提供者接口。当然,基于SPI的包过滤安全措施并不是特别的好,因为很多建立在TDI上面的数据传输并不会受到SPI的影响,所以当前流行的防火墙大都是建立在NDIS之上的。

参考文献

[1]朱雁辉.Windows防火墙与网络封包截获技术[M].北京:电子工业出版社,2002.

[2]汪国洋,王景中.基于SPI的访问控制技术[J].计算机应用,2003(z1):267-269.

[3]胡滨,贺超凯,左明.Windows下使用SPI过滤网络数据包[J].华中科技大学学报:自然科学版,2003(S1).

上一篇:VGA信号切换器 下一篇:数字故事设计及其教学应用