正确开启混杂模式需用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标志。

Linux 中配置网卡混杂模式是抓包的前提,它让网卡不再过滤目标非本机的数据帧,从而捕获局域网内其他设备间的通信流量。实际操作不难,但需注意权限、接口状态和工具配合。
确认网卡名称并检查当前模式
先用命令列出所有网络接口:
- ip link show 或 ifconfig -a(若已安装 net-tools)
找到你要使用的有线或无线接口名(如 eth0、enp0s3、wlan0)。再检查是否已启用混杂模式:
- ip link show dev eth0 | grep -i promisc —— 若输出含 PROMISC,说明已开启
- ifconfig eth0 | grep PROMISC —— 同样可验证
启用或关闭混杂模式
必须使用 root 权限执行:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 开启:sudo ifconfig eth0 promisc
- 关闭:sudo ifconfig eth0 -promisc
启用后再次运行 ip link show eth0,能看到状态中新增 PROMISC 标志。注意:某些现代发行版推荐用 ip link set eth0 promisc on 替代 ifconfig,更符合当前标准。
配合抓包工具使用的关键点
混杂模式只是底层准备,上层工具是否生效还取决于具体用法:
- tcpdump 默认自动启用混杂模式(tcpdump -i eth0),加 -p 参数可强制禁用
- Wireshark 图形界面中,勾选接口时默认启用混杂模式;但若在无线网卡上抓空口包,应使用 monitor 模式(如 airmon-ng 创建 wlan0mon),此时反而要取消 Wireshark 的 “Use promiscuous mode” 选项,避免冲突
- 混杂模式本身不保证能捕获所有帧——例如交换机端口隔离(port security)、VLAN 划分或物理拓扑限制(如非 hub 环境)仍会阻挡跨设备流量
常见问题与验证方法
如果开启混杂后仍看不到预期流量,可快速排查:
- 确认你抓包的网卡确实连接在同一广播域(如接在同一个交换机下,且未启用端口隔离)
- 尝试发一个 ARP 请求(如 arping -I eth0 192.168.1.1),观察 Wireshark 或 tcpdump 是否捕获到其他主机发出的 ARP 响应
- 用 tcpdump -i eth0 arp -nn 单独过滤 ARP 包,比全量抓包更易判断是否生效










