2024年6月11日发(作者:)

网络嗅探器的工作原理

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所

示。