关于网卡混杂模式
遇到问题是,Wireshark将网卡调整为混杂模式后,也抓不到局域网中,其它设备通信的数据包。
首先,我们要明确,什么是混杂模式?
混杂模式(英语:promiscuous mode)是电脑网络中的术语。是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。
一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。网卡的混杂模式一般在网络管理员分析网络数据作为网络故障诊断手段时用到,同时这个模式也被网络黑客利用来作为网络数据窃听的入口。在Linux操作系统中设置网卡混杂模式时需要管理员权限。在Windows操作系统和Linux操作系统中都有使用混杂模式的抓包工具,比如著名的开源软件Wireshark。
简单来说,混杂模式就是将所有流经该网卡的数据,通通抓获,另外,混杂模式可以手动指令开启,也可以用Wireshark开启。前提是该网卡支持混杂模式,几乎所有现代的有线网卡(Ethernet)都支持混杂模式,但无线网卡支持有限。
回到我们的问题,为什么开启了混杂模式后,网卡抓不到其它设备通讯的流量呢?答案是,因为这部分流量根本没有流经我们的网卡。
原因要追溯到Hub和Switch的渊源,计算机网络初代,人们使用Hub,也就是集线器,通信,集线器属于物理层的设备,他没有匹配MAC地址的功能,数据转发方式只有广播。在这种设备下,所有设备共享碰撞域,同时也共享带宽,导致带宽被平分,这也是计网中常见的问题:
一个集线器带宽为200M,共连接10台计算机,那么每台计算机的享用的带宽是多少?如果是交换机的话,每台计算机享用的带宽是多少?前者的答案是200/10=20M,后者则是200M。
这是因为Switch,也就是交换机在Hub的基础上,增加了端口转发功能,也就是每个端口分配一个MAC地址,并维护一个MAC表,属于第二层数据链路层的设备。当终端设备通信时,只发生在两个端口之间,他们独享自己的碰撞域,流量数据也不会流经至其它端口,除非是FF:FF:FF:FF广播地址。如果目的MAC地址是广播地址的话,所有端口都能够接收到。
由于时代的发展,Hub逐渐被人们弃用,它不仅传输效率低,而且不安全,已经被Switch顶替。且设备集成化越来越高,如今的无限路由器已经将Switch和AP做在了一起,Wi-Fi环境下抓不到其他终端设备通信的数据原理亦是如此。
那么问题又来了,既然是这样,我们如何抓到同一局域网下,其它终端设备通信的流量呢?答案是镜像Switch。
正如其名,该种Switch是拥有镜像功能的,它会将指定端口通信的数据镜像转发至另一个指定端口。注意这可不是Switch回退至Hub,镜像Switch也是会维护MAC表的,并指定被镜像端口和镜像转发端口,为了更加清晰,这里附上一张淘宝上该种设备的截图:
那么至此,问题也得到了解决。Wireshark抓不到同一局域网中,其它终端设备通信的流量是因为该流量根本没有流经我们的网卡,要想让其流量流经我们的网卡,就需要特殊的Switch设备,或者做ARP欺骗。