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

使用Scapy发送Wi-Fi探测请求无响应问题求助

无法收到Wi-Fi探测请求响应的原因分析

问题场景

使用两个Wi-Fi适配器,第一个发送探测请求,第二个监控请求与响应。已通过Scapy构造数据包并成功发送,第二个接口的Wireshark能捕获到请求,但范围内至少7个AP均无响应。尝试过两种发送方式:

  1. 自行构造探测请求数据包
  2. 复制其他设备曾获响应的探测请求原始字节发送
    两种方式均未收到AP响应。

自定义构造探测请求的代码

ssid = "" # 无定向探测,通配符
channel = 1  
interface = "wlan1"
senderaddress = "34:0a:33:33:cc:ff"
dst='ff:ff:ff:ff:ff:ff'
param = Dot11ProbeReq()
essid = Dot11Elt(ID='SSID',info=ssid)
dsset = Dot11Elt(ID='DSset',info='\x01')

probe_request= RadioTap()/Dot11(type=0,subtype=4,FCfield=0,addr1=dst,addr2=senderaddress,addr3=dst)/param/essid/dsset

sendp(probe_request, iface=interface, verbose=1)

复制原始有效数据包的代码

raw_hex_bytes = b'\x00\x00\x0f\x00\x2e\x00\x00\x00\x10\x02\x7b\x09\xa0\x00\xa4\x40\x00\x00\x00\xff\xff\xff\xff\xff\xff\x72\x28\x24\x35\x00\x4d\xff\xff\xff\xff\xff\xff\x30\x9a\x00\x00\x01\x04\x02\x04\x0b\x16\x32\x08\x0c\x12\x18\x24\x30\x48\x60\x6c\x03\x01\x04\x2d\x1a\xad\x01\x13\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xbf\x0c\x92\xf9\x91\x33\xfa\xff\x62\x03\xfa\xff\x62\x03\xdd\x07\x00\x50\xf2\x08\x00\x2a\x00\x7f\x0b\x00\x00\x0a\x02\x00\x40\x00\x00\x00\x01\x20\xff\x03\x02\x00\x07\xdd\x0a\x50\x6f\x9a\x16\x03\x01\x01\x65\x01\x01\xdd\x08\x8c\xfd\xf0\x01\x01\x02\x01\x00' 

probe_request_packet = RadioTap(raw_hex_bytes)

print("Probe Request Packet Summary:")
print(probe_request_packet.summary())

sendp(probe_request_packet, iface=interface, verbose=1)

问题原因分析

一、自定义构造数据包的问题

  • 信道不匹配:虽然代码中设置了DSset为信道1,但发送接口wlan1可能并未实际切换到信道1。AP只会响应同信道的探测请求,若接口在其他信道,AP根本无法接收你的请求。
  • 缺少关键信息元素(IE):多数AP会忽略缺少核心IE的探测请求,比如支持的速率、RSN加密信息等。你的自定义包仅包含SSID和DSset,缺少这类必要字段,AP会直接丢弃请求。
  • RadioTap头部参数异常:Scapy默认生成的RadioTap头部可能缺少信道、传输功率等关键参数,导致AP无法正确解析数据包。

二、复制原始数据包仍无响应的问题

  • RadioTap头部与当前硬件不兼容:复制的原始字节包含原设备的RadioTap头部参数(如传输功率、天线配置),这些参数与你的适配器不匹配,AP无法正确接收或解析数据包。
  • MAC地址冲突或不被认可:原始数据包的源MAC(addr2字段)是原设备的MAC,若你的适配器实际MAC与此不一致,部分AP会因MAC过滤或验证机制拒绝响应陌生MAC的请求。
  • 私有IE或损坏的数据包:原始数据包可能包含原设备的厂商私有IE,或在复制过程中出现字节损坏,导致AP不认可该请求。

排查与修复步骤

  • 强制设置发送接口信道:执行iw dev wlan1 set channel 1命令,确保发送接口与AP所在信道一致(可通过Wireshark抓取AP的Beacon帧确认信道)。
  • 补充关键IE字段:在自定义数据包中添加速率、RSN等IE,示例:
    rates = Dot11Elt(ID='Rates', info='\x82\x84\x8b\x96\x0c\x12\x18\x24')
    rsn = Dot11Elt(ID='RSNinfo', info='\x01\x00\x00\x0f\xac\x02\x02\x00\x00\x0f\xac\x04\x00\x0f\xac\x02\x01\x00')
    probe_request= RadioTap()/Dot11(type=0,subtype=4,FCfield=0,addr1=dst,addr2=senderaddress,addr3=dst)/param/essid/dsset/rates/rsn
    
  • 修正RadioTap头部:手动指定信道等必要参数,避免默认头部的缺失:
    rt = RadioTap()
    rt.channel = 1
    rt.channel_frequency = 2412  # 信道1对应的2.4GHz频率
    probe_request= rt/Dot11(type=0,subtype=4,FCfield=0,addr1=dst,addr2=senderaddress,addr3=dst)/param/essid/dsset
    
  • 确保MAC地址一致性:代码中的senderaddress需与发送适配器wlan1的实际MAC一致,或使用适配器真实MAC发送。
  • 临时关闭AP MAC过滤:若AP开启了MAC过滤,陌生MAC的请求会被拒绝,关闭过滤后测试是否能收到响应。

内容的提问来源于stack exchange,提问作者heddha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:25:26