使用Scapy探测WiFi AP时遇‘no such device’错误求助
解决Scapy抓包时的"no such device"错误
你刚接触Scapy和Python就遇到这个问题很正常——这个错误的核心原因是你的系统里根本不存在名为mon0的监听模式无线接口,Scapy找不到指定的网卡,所以抛出了这个提示。下面一步步帮你搞定:
第一步:先确认你的无线网卡叫什么名字
不同系统查看网络接口的命令不一样,先搞清楚你的无线网卡实际标识:
- Linux:终端运行
ip link show,找带有wireless标记的接口(通常是wlan0、wlp2s0这类) - Windows:打开管理员命令提示符,运行
netsh wlan show interfaces - macOS:终端运行
ifconfig,找标注为无线的接口(比如en0)
第二步:把无线网卡切换到监听模式
Scapy要抓802.11的探测包,必须让网卡处于监听(monitor)模式,默认网卡是管理模式,所以得手动切换:
Linux系统操作(最常用)
假设你的无线接口是wlan0,执行以下命令(需要sudo权限):
# 先关闭网卡 sudo ip link set wlan0 down # 设置为监听模式 sudo iw dev wlan0 set type monitor # 重新开启网卡 sudo ip link set wlan0 up
再运行ip link show确认,接口会显示mode:MONITOR。注意:很多系统不会自动把接口名改成mon0,别硬套这个名字,用你实际的接口标识就行。
Windows/macOS小提示
- Windows:需要先在设备管理器里启用网卡的监听模式,或者用Aircrack-ng这类工具辅助,然后用管理员权限运行脚本。
- macOS:同样需要sudo权限,可先运行
sudo airport en0 sniff开启监听,再用Scapy指定对应接口。
第三步:修改你的代码适配环境
- 替换接口名:把
sniff(iface="mon0", prn = PacketHandler)里的mon0改成你实际的监听接口名(比如wlan0)。 - 适配Python3语法:你的代码是Python2风格,现在主流用Python3,把
print语句改成:
(因为print(f"AP MAC: {pkt.addr2} with SSID: {pkt.info.decode()}")pkt.info是字节类型,Python3里需要解码成字符串才能正常显示SSID)
修改后的完整代码示例:
#!/usr/bin/env python3 from scapy.all import * ap_list = [] def PacketHandler(pkt): if pkt.haslayer(Dot11): if pkt.type == 0 and pkt.subtype == 8: if pkt.addr2 not in ap_list: ap_list.append(pkt.addr2) print(f"AP MAC: {pkt.addr2} with SSID: {pkt.info.decode()}") sniff(iface="wlan0", prn=PacketHandler)
第四步:用管理员权限运行脚本
抓包需要系统级权限,Linux/macOS一定要加sudo,Windows用管理员命令提示符运行:
sudo python3 your_script_name.py
额外提醒
- 不是所有无线网卡都支持监听模式,尤其是一些内置低功耗网卡,如果切换模式失败,可能需要换个支持的外接网卡。
- 如果还是有问题,可以试试不指定
iface参数,让Scapy自动检测可用的监听接口:sniff(prn=PacketHandler)
内容的提问来源于stack exchange,提问作者Bilal Ali
相关产品推荐
相关产品推荐

