Sniffer(嗅探器)就是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种技术。该技术被广泛应用于网络维护和管理方面,它工作的时候就像一部被动声纳,默默的接收着来自网络的各种信息,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况,以便找出所关心的网络中潜在的问题。
Sniffer技术简介
数据在网络上是以很小的称为“帧”(又称:包)的单位传输的,帧由多个部分组成,不同的部分对应不同的信息以实现相应的功能,例如,以太网的前12个字节存放的是源地址和目的地址,这些数据告诉网络该帧的来源和去处。其余的部分存放实际用户数据、TCP/IP的报头或IPX报头等等。帧是根据通讯所使用的协议,由网络驱动程序按照一定规则生成,然后通过网络接口卡(网络接口卡,在局域网中一般指网卡)发送到网络中,通过网线传送到它们的目的主机,在目的主机的一端按照同样的通讯协议执行相反的过程。接收端机器的网络接口卡捕获到这些帧,并告诉操作系统有新的帧到达,然后对其进行存储。在正常情况下,网络接口卡读入一帧并进行检查,如果帧中携带的目的地址(这里的目的地址是指物理地址而非IP地址,该地址是网络设备的唯一性标志)和自己的物理地址一致或者是广播地址(就是被设定为一次性发送到网络所有主机的特殊地址,当目标地址为该地址时,所有的网络接口卡都会接收该帧),网络接口卡通过产生一个硬件中断引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理,否则就将这个帧丢弃。
我们可以想象到这样一种特别的情况:如果网络中某个网络接口卡的物理地址不确定呢(这可以通过本地网络接口卡设置成“混杂”状态来实现)?网络接口卡会如何处理收到的帧呢?实际的情况是该网络接口卡将接收所有在网络中传输的帧,无论该帧是广播的还是发向某一指定地址的,这就形成了监听。如果某一台主机被设置成这种监听模式,它就成了一个Sniffer。
鉴于Sniffer的工作原理,我们知道:如果一个数据帧没有发送到你的网络接口卡上,那么你将无法监听到该帧。所以Sniffer所能监听到的信息仅限于在同一物理网络内传送的数据,在使用了交换(路由)设备的网络中,由于其数据是根据目的地址进行分发的,单个的网络接口卡将无法监听到所有正在传输的信息。
不同传输介质的网络的可监听性是不同的。一般来说,以太网被监听的可能性比较高,因为以太网是一个广播型的网络;FDDI Token被监听的可能性也比较高,尽管它并不是一个广播型网络,但带有令牌的那些数据包在传输过程中,平均要经过网络上一半的计算机;电话线监听的可能性中等,但在实际中,高速的调制解调器比低速的调制解调器搭线困难的多,因为高速调制解调器引入了更多的频率;微波和无线网被监听的可能性同样比较高,因为无线电本身是一个广播型的传输媒介,弥散在空中的无线电信号可以被很轻易的截获。所以,Sniffer可以应用于大部分的网络类型中。
Sniffer本来是网络工程师常用的工具,也是网络管理员的好帮手,但由于网络中的数据传送往往是明文方式进行的(不要怀疑,甚至于连用户名和口令这类敏感信息也是明文的,尤其是在以太网中),所以Sniffer也常常被某些人用于“特殊”的用途。