正确开启混杂模式需用sudo ip link set eth0 promisc on,关闭用sudo ip link set eth0 promisc off;验证必须查ip link show eth0中的promiscuity字段或/sys/class/net/eth0/flags中bit 8是否置位,而非ifconfig的PROMISC标志。

开启或关闭网卡混杂模式,核心是用 ip link 命令操作,且必须以 root 权限执行。别依赖 ifconfig 的 PROMISC 显示——它在 Ubuntu 22.04+、RHEL 8+ 等系统中常不更新,容易误判。
怎么正确开启混杂模式
运行以下命令即可临时启用(重启后失效):
-
sudo ip link set eth0 promisc on(将 eth0 切换为混杂模式) - 替换
eth0为你实际的网卡名,可用ip -br link快速查看 - 成功后不会输出任何提示,需手动验证
怎么确认已真正启用
不能只看 ifconfig 输出里的 PROMISC 字样。可靠方式有两种:
- 查
ip link show eth0,找 promiscuity 1 字段(不是 flags 里的 PROMISC) - 或读内核标志:
cat /sys/class/net/eth0/flags,结果是十六进制数,执行printf "%d\n" $((0x$(cat /sys/class/net/eth0/flags) & 0x100)),输出 256 表示已启用
怎么安全关闭混杂模式
临时关闭只需一条命令:
sudo ip link set eth0 promisc off- 关闭后再次运行
ip link show eth0,应显示 promiscuity 0 - ifconfig eth0 -promisc 仍可工作,但 Alpine Linux 等轻量发行版已移除该语法,不建议使用
如何让设置重启后依然有效
ip link 的操作仅作用于运行时。若需开机自动启用,必须写入网络服务配置:
- Systemd-networkd:在
/etc/systemd/network/*.network文件中添加Promiscuous=yes到 [Network] 段 - NetworkManager:用
nmcli connection modify "connection-name" ethtool.feature-rx off不适用;正确做法是通过nmcli connection modify "连接名" 802-3-ethernet.promiscuous yes,再nmcli connection reload && nmcli connection down "连接名" && nmcli connection up "连接名" - 传统 ifupdown(Debian/Ubuntu):在
/etc/network/interfaces对应 iface 段加一行post-up ip link set $IFACE promisc on


















