1486 字
7 分钟
网卡的混杂模式

我们来详细解释一下 Linux 网卡的混杂模式。

1. 什么是网卡的混杂模式?#

简单来说,​​ 混杂模式是一种网卡的工作模式 ​​。

  • ​ 正常模式 ​​:在普通模式下,网卡有一个唯一的 MAC(物理)地址。它只会接收 ​​ 目的地 MAC 地址是自己 ​​ 的数据帧,以及 ​​ 广播地址 ​​(ff:ff:ff:ff:ff)和 ​​ 组播地址 ​​(如果已订阅)的数据帧。所有其他目的地 MAC 地址的数据帧都会被网卡硬件直接丢弃,根本不会上传给操作系统内核处理。这大大节省了 CPU 资源。
  • ​ 混杂模式 ​​:当网卡被设置为混杂模式时,它会 ​​ 捕获所有流经其所在网络端口的数据帧 ​​,而不管这些帧的目的地 MAC 地址是什么。它会将所有数据包都上传给操作系统,以供进一步处理。

可以把它想象成一个邮差:

  • ​ 正常模式 ​​:邮差只把写着你名字和地址(你的 MAC 地址)的信件,或者写着“全体居民收”(广播地址)的信件投递给你。其他人的信件他看都不看就直接扔掉了。
  • ​ 混杂模式 ​​:这个邮差变得“八卦”了,他把所有经过他手的信件,无论收件人是谁,都复制一份给你。

2. 混杂模式的作用#

混杂模式的主要作用是 ​​ 网络流量分析和监控 ​​。

  1. ​ 网络抓包与故障排查 ​​:这是最核心和正当的用途。像 tcpdumpWireshark这样的网络抓包工具,要想捕获不是发往本机的数据包(例如同一个局域网内其他设备之间的通信),就必须将网卡置于混杂模式。这是网络管理员诊断网络问题、分析协议交互的必备手段。
  2. ​ 入侵检测系统 ​​:IDS(如 Suricata, Snort)需要监控整个网段的流量来检测潜在的攻击和异常行为,因此它们必须在混杂模式下运行。
  3. ​ 网络桥接或透明代理 ​​:某些网络设备(如软件桥接、防火墙或透明代理服务器)需要看到所有经过它们的流量才能做出转发或过滤决策,这也需要混杂模式。
  4. ​ 恶意用途 ​​:当然,这个特性也可能被恶意软件利用,例如 ​​ 网络嗅探 ​​,用于窃听局域网内的明文传输密码、聊天记录等敏感信息。这就是为什么交换机的普及大大增加了网络窃听的难度,因为交换机不像集线器那样广播所有流量。

​ 重要提示 ​​:在现代化的交换网络环境中,即使开启了混杂模式,一台主机通常也只能看到发往自己的流量、广播流量和组播流量。要捕获其他主机间的流量,通常需要通过 ​​ 端口镜像 ​​ 或在网络网关位置进行抓包。

3. 网卡的其他模式#

除了混杂模式,网卡通常还有以下几种常见的工作模式或状态:

  1. ​ 单播模式 ​

    这是网卡最基础、最普通的工作模式,也就是上面描述的“正常模式”。它只接收目的地为自己 MAC 地址的帧。

  2. ​ 广播模式 ​

    网卡默认都会接收目的地址为广播地址(FF:FF:FF:FF:FF:FF)的帧。这种帧是发给网络中的所有设备的,例如 ARP 请求“谁的 IP 是 192.168.1.1?”就是通过广播实现的。

  3. ​ 多播/组播模式 ​

    网卡可以配置为监听一个或多个多播 MAC 地址。当它加入某个多播组后(例如通过 IGMP 协议),它就会接收发往该组地址的流量。这在视频会议、流媒体等应用中很常见。多播模式可以看作是介于单播和广播之间的一种“选择性接收”模式。

  4. ​ promiscuous mode(混杂模式)​

    正如上文详细解释的,接收所有帧的模式。

  5. ​ allmulti mode(全部多播模式)​

    可以理解为 ​​“多播版本的混杂模式”​​。

    • ​ 混杂模式 ​​:接收 ​​ 所有 ​​ 帧(单播、广播、多播)。
    • ​ 全部多播模式 ​​:只接收 ​​ 所有多播帧和广播帧 ​​,但不接收目的地为其他主机的单播帧。 这个模式在某些特定的网络监控场景下有用,当你只关心多播流量时,可以避免被过多的无关单播流量淹没。

4. 如何设置和管理这些模式?#

在 Linux 中,你可以使用 ip命令或旧的 ifconfig命令来查看和设置网卡的模式。

  • ​ 查看当前模式 ​​:
    ip link show eth0
    或者
    ifconfig eth0
    在输出中,如果看到 PROMISC标志,则表示网卡正处于混杂模式。
  • ​ 开启混杂模式 ​​:
    sudo ip link set dev eth0 promisc on
    或者
    sudo ifconfig eth0 promisc
  • ​ 关闭混杂模式 ​​:
    sudo ip link set dev eth0 promisc off
    或者
    sudo ifconfig eth0 -promisc
  • ​ 开启全部多播模式 ​​:
    sudo ip link set dev eth0 allmulticast on

5. 总结#

模式接收的流量主要用途
​ 单播模式 ​目的地为本机的帧正常网络通信
​ 广播模式 ​广播地址的帧接收网络广播(如 ARP)
​ 多播模式 ​已订阅的多播组帧视频流、服务发现
​ 混杂模式 ​​ 所有 ​​ 流经网卡的帧​ 网络抓包分析、IDS​
​ 全部多播模式 ​​ 所有多播和广播 ​​ 帧多播流量监控

混杂模式是一个强大的网络诊断工具,但使用时需要具备相应的权限(root),并且要符合网络安全管理规定。