You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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指定对应接口。

第三步:修改你的代码适配环境

  1. 替换接口名:把sniff(iface="mon0", prn = PacketHandler)里的mon0改成你实际的监听接口名(比如wlan0)。
  2. 适配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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:05:33