首先我们来说明一下一些网络基本知识。大多数的以太网都是一根总线的拓扑结构,使用同轴电缆或者双绞线和hub连通。网络上的所有节点(计算机和其他设备)都可以通过同样的线路通信,并且使用称为载波监听多路访问/冲突检测(CSMA/CD)的方案依次发送数据。你可以把CSMA/CD看作是在一个很吵闹的宴会中的两人对话,你需要等一会儿,等别人说话的间歇才有机会发言。网络上的所有节点都有自己唯一的MAC(媒体访问控制)地址,他们使用该地址互相发送信息包。通常,节点只会关注目的地是自己的MAC地址的那些信息包。但是如果网卡被设置成混杂模式的话,那它就会察看它连接的线路上的所有数据包。
为了减少冲突数量、降低嗅探不属于某节点的数据的可能性,大多数网络都使用了交换机。在网络中,hub是种无源设备,它会将接收到的所有传输发送到它的所有端口。而交换机则察看它所连接的所有节点的MAC地址以及所在端口,然后把那些数据包只发给它的目标节点。交换机大大降低了网路中的冲突数量,增大了网络的吞吐量。理论上,使用交换机的网络中,每个节点只能收到广播消息(发给局域网上所有计算机的消息)以及专门发送给它的MAC地址的数据包,还有偶尔出现的不知道目标地址的数据包。但是即使在局域网中使用交换机,它还是有可能被人使用某些交换机上的镜像端口而嗅探(这些镜像端口本来是网管分析网络问题时使用的),嗅探者可以误导交换机使其将数据映射给所有端口或者使用一种称为ARP病毒的技术(后面会详细讲到)。
以上讲述的是以太网络的一些基本知识,而WiFi(801.11a/801.11b/801.11g/801.11n)则与之完全不同。无线局域网很像使用hub的以太局域网。局域网中所有计算机都能看到发送给别的计算机的数据,但通常他们可以设置成忽略这些信息。(事实上,比这复杂,但是我篇幅有限,就不详细讲那错综复杂的80.211网络了)。但如果网卡是设置成混杂模式的话,那么它就不会忽略发送给其他计算机的数据,而是会察看这些数据,允许使用嗅探器的用户看到附在同一访问点的发送给其他用户的数据。混杂模式在Windows和Linux(或者其他类似Unix的操作系统)的有线网卡上运行得很有效,但是并不是所有的无线网卡都能很好地支持该模式(比如Intel的叫做IPW2200的Centrino 802.11g芯片)。如果嗅探器的网卡不支持混杂模式,那么嗅探者就得把它附到无线网络的WAP(无线接入点)上才能看到其他数据。如果攻击者使用的是Linux(或者类似Unix的操作系统),如果网卡支持的话,它可能可以使用监听模式。在监听模式下,无线网卡直接监听无线电波中的原始信息包而无需WAP的辅助。从攻击者角度看,监听模式的好处是:由于不需要WAP,他们的活动不会留下任何痕迹,也不用在网络上发送数据包。
由于WiFi网络使用的安全协议各有不同,因此嗅探WiFi网络变得更加复杂。如果你的网卡支持混杂模式并且你能使用WEP(也就是说你知道WEP密钥)连接到无线网络,你就可以嗅探几乎所有你想要获得的信息。如果网络使用的是WPA,就没那么容易了,因为即使你知道密码,你也不一定能解码那些你没有参与的网络对话中的所有数据。但是,你却有可能进行ARP病毒攻击或者使用其它的MitM(有人参与其中)攻击,从而获得数据路由。
网管们应当注意嗅探器的很多合法用途。网管可以用它们找出网络上出问题的计算机,比如占用太多带宽,网络设置错误或者正在运行恶意软件等等。我觉得它们在找出黑客攻击方面非常有用,我可以用它们嗅探自己的