基于NDIS中间层驱动程序的网络嗅探器
发布时间:2008/5/29 0:00:00 访问次数:671
1 引 言
网络嗅探器(sniffer)是利用计算机网络接口截获所需网络内部数据报文的一种工具,他广泛地应用于流量分析、安全监控、网管分析、防火墙等的实现中。sniffer主要被用来在网络上截获位于osi协议模型中各个协议层次上的数据包,通过对截获数据包的分析,嗅探器可以掌握目标主机的信息。由于与具体平台的网络协议栈密切相关,并涉及网络安全的敏感问题,网络嗅探一般没有通用的实现方法。
随着计算机网络应用的普及,和windows 2000/xp网络操作系统的广泛应用,使得在window 2000/xp下保障网络通信安全成为一个迫切需要解决的问题。本文基于ndis中间层驱动程序实现网络嗅探器,为满足上述需求提供了充分的可能。
2 网络嗅探器的基本工作原理
网络嗅探器利用的是共享式的网络传输介质。共享即意味着网络中的一台机器可以嗅探到传递给本网段(冲突域)中的所有机器的报文。例如最常见的以太网就是一种共享式的网络技术,以太网卡收到报文后,通过对目的地址进行检查,来判断是否是传递给自己的,如果是,则把报文传递给操作系统;否则,将报文丢弃,不进行处理;网卡存在一种特殊的工作模式,在这种工作模式下,网卡不对目的地址进行判断,而直接将他收到的所有报文都传递给操作系统进行处理,这种特殊的工作模式,就称之为混杂模式。网络嗅探器通过将网卡设置为混杂模式来实现对网络的嗅探。
一个实际的主机系统中,数据的收发是由网卡来完成的,当网卡接收到传输来的数据包时,网卡内的单片程序首先解析数据包的目的网卡物理地址,然后根据网卡驱动程序设置的接收模式判断该不该接收,认为该接收就产生中断信号通知cpu,认为不该接收就丢掉数据包,所以不该接收的数据包就被网卡截断了,上层应用根本就不知道这个过程。cpu如果得到网卡的中断信号,则根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,并将接收的数据交给上层协议软件处理。
3 ndis中间层驱动程序
访问位于网络底层的传输协议是网络嗅探器的基本功能。网络嗅探器必须能够接收并分析来自数据链路层、网络层、传输层等底层的数据包,本文介绍的网络嗅探器采用了网络驱动程序接口规范(ndis)中间层驱动程序技术设计。
ndis是windows网络协议栈构件间的接口规范,基于ndis的核心态包过滤技术具有较高的结构性和可扩展性。从ndis4.0开始,ndis开始支持中间层驱动程序(intermediate driver),为ndis体系带来了很多的灵活性,他是位于一个或者多个nic驱动之上和传输层驱动之下的驱动程序,即位于链路层和协议层之间,对上面的协议层提供一个虚拟的微端口网卡驱动接口(miniportdriver),而对下面的链路层则提供一个协议驱动接口(protocol driver)。所有经过网卡发送到网络和从网络接收的数据包都要由此通过,因此中间层驱动程序可以对所有网络数据包进行过滤和处理。从ndis中间层在windows中的位置来看,其处于核心层,处于与操作系统同等级别的核心态,如图1所示。
本文使用微软提供的驱动程序开发包ddk进行ndis中间层驱动程序编程。具体流程为:
(1)ndis驱动程序在主入口函数dirverentry中调用ndisminitializewrapper函数注册输出函数集入口,得到设备句柄;
(2)输入(1)得到的句柄调用ndisimregisterlayeredminiport,为ndis中间层驱动程序注册一套miniport回调函数,这样上层protocol协议就认为中间层驱动程序是网卡,并通过ndis库调用这些回调函数;
(3)调用ndisregisterprotocol,为ndis中间层驱动程序注册一套protocol回调函数,这样下层网卡就认为中间层驱动程序是一个协议,并通过ndis库调用这些函数;
(4)当操作系统发现nic时,ndis调用中间层驱动程序注册的protocoladapterbind函数,该函数内部需要调用ndisopenadapt打开适配器,保证了网卡和中间层的绑定关系;
(5)调用ptreceivepacket接收网卡收到的数据包;
(6)数据包与所设置过滤规则进行比较,不满足规则时调用函数返回ndis_status_not_accepted,该宏在ndis.h中定义,这样就结束了本接收函数的调用。
4 基于ndis中间层驱动程序的网络嗅探器实现
4.1 网络嗅探器的结构模型
本文实现的网络嗅探器主要由运行于ring0层的ndis中间层驱动程序模块和运行于ring3层的应用层包处理模块构成。在windows 2000平台下实现了对流经指定网络适配器的各种网络协议、任意/指定ip地址和端口的数据包的嗅探。
(1)应用层包处理模块:处于应用层,负责过滤准则的设置和数据包的处理分析。
(2)数据包捕获及过滤实现模块:基于ndis中间层驱动程序完成底层数据的截获功能,并依据数据包过滤准则实现对数据包的接收过滤,向上层应用程序递交数据包。
4.2 应用层包过滤准则设置
网络嗅探器中采用包过滤技术的目的主
1 引 言
网络嗅探器(sniffer)是利用计算机网络接口截获所需网络内部数据报文的一种工具,他广泛地应用于流量分析、安全监控、网管分析、防火墙等的实现中。sniffer主要被用来在网络上截获位于osi协议模型中各个协议层次上的数据包,通过对截获数据包的分析,嗅探器可以掌握目标主机的信息。由于与具体平台的网络协议栈密切相关,并涉及网络安全的敏感问题,网络嗅探一般没有通用的实现方法。
随着计算机网络应用的普及,和windows 2000/xp网络操作系统的广泛应用,使得在window 2000/xp下保障网络通信安全成为一个迫切需要解决的问题。本文基于ndis中间层驱动程序实现网络嗅探器,为满足上述需求提供了充分的可能。
2 网络嗅探器的基本工作原理
网络嗅探器利用的是共享式的网络传输介质。共享即意味着网络中的一台机器可以嗅探到传递给本网段(冲突域)中的所有机器的报文。例如最常见的以太网就是一种共享式的网络技术,以太网卡收到报文后,通过对目的地址进行检查,来判断是否是传递给自己的,如果是,则把报文传递给操作系统;否则,将报文丢弃,不进行处理;网卡存在一种特殊的工作模式,在这种工作模式下,网卡不对目的地址进行判断,而直接将他收到的所有报文都传递给操作系统进行处理,这种特殊的工作模式,就称之为混杂模式。网络嗅探器通过将网卡设置为混杂模式来实现对网络的嗅探。
一个实际的主机系统中,数据的收发是由网卡来完成的,当网卡接收到传输来的数据包时,网卡内的单片程序首先解析数据包的目的网卡物理地址,然后根据网卡驱动程序设置的接收模式判断该不该接收,认为该接收就产生中断信号通知cpu,认为不该接收就丢掉数据包,所以不该接收的数据包就被网卡截断了,上层应用根本就不知道这个过程。cpu如果得到网卡的中断信号,则根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,并将接收的数据交给上层协议软件处理。
3 ndis中间层驱动程序
访问位于网络底层的传输协议是网络嗅探器的基本功能。网络嗅探器必须能够接收并分析来自数据链路层、网络层、传输层等底层的数据包,本文介绍的网络嗅探器采用了网络驱动程序接口规范(ndis)中间层驱动程序技术设计。
ndis是windows网络协议栈构件间的接口规范,基于ndis的核心态包过滤技术具有较高的结构性和可扩展性。从ndis4.0开始,ndis开始支持中间层驱动程序(intermediate driver),为ndis体系带来了很多的灵活性,他是位于一个或者多个nic驱动之上和传输层驱动之下的驱动程序,即位于链路层和协议层之间,对上面的协议层提供一个虚拟的微端口网卡驱动接口(miniportdriver),而对下面的链路层则提供一个协议驱动接口(protocol driver)。所有经过网卡发送到网络和从网络接收的数据包都要由此通过,因此中间层驱动程序可以对所有网络数据包进行过滤和处理。从ndis中间层在windows中的位置来看,其处于核心层,处于与操作系统同等级别的核心态,如图1所示。
本文使用微软提供的驱动程序开发包ddk进行ndis中间层驱动程序编程。具体流程为:
(1)ndis驱动程序在主入口函数dirverentry中调用ndisminitializewrapper函数注册输出函数集入口,得到设备句柄;
(2)输入(1)得到的句柄调用ndisimregisterlayeredminiport,为ndis中间层驱动程序注册一套miniport回调函数,这样上层protocol协议就认为中间层驱动程序是网卡,并通过ndis库调用这些回调函数;
(3)调用ndisregisterprotocol,为ndis中间层驱动程序注册一套protocol回调函数,这样下层网卡就认为中间层驱动程序是一个协议,并通过ndis库调用这些函数;
(4)当操作系统发现nic时,ndis调用中间层驱动程序注册的protocoladapterbind函数,该函数内部需要调用ndisopenadapt打开适配器,保证了网卡和中间层的绑定关系;
(5)调用ptreceivepacket接收网卡收到的数据包;
(6)数据包与所设置过滤规则进行比较,不满足规则时调用函数返回ndis_status_not_accepted,该宏在ndis.h中定义,这样就结束了本接收函数的调用。
4 基于ndis中间层驱动程序的网络嗅探器实现
4.1 网络嗅探器的结构模型
本文实现的网络嗅探器主要由运行于ring0层的ndis中间层驱动程序模块和运行于ring3层的应用层包处理模块构成。在windows 2000平台下实现了对流经指定网络适配器的各种网络协议、任意/指定ip地址和端口的数据包的嗅探。
(1)应用层包处理模块:处于应用层,负责过滤准则的设置和数据包的处理分析。
(2)数据包捕获及过滤实现模块:基于ndis中间层驱动程序完成底层数据的截获功能,并依据数据包过滤准则实现对数据包的接收过滤,向上层应用程序递交数据包。
4.2 应用层包过滤准则设置
网络嗅探器中采用包过滤技术的目的主