Monitor Mode模式下Packet Injection跨设备失效问题求助
WiFi数据包注入仅本地可见的问题排查与修复
你遇到的问题核心是注入的802.11帧不符合标准或参数配置错误,导致目标设备无法识别接收。以下是具体的遗漏点和修复方案:
1. 802.11帧地址字段完全配置错误
Dot11帧的三个地址字段有明确分工:
addr1:接收方MAC(目标设备/AP的MAC)addr2:发送方MAC(本地注入网卡的MAC)addr3:BSSID(目标AP的MAC,关联请求帧必须设置为AP的MAC)
你的代码中把addr1设为本地网卡MAC,addr2设为目标设备MAC,完全搞反了,导致帧被发送到错误的接收方,目标设备自然无法捕获。
2. SSID字段配置错误
关联请求帧中的Dot11Elt(ID=0)是SSID字段,你填写的info="MY_BSSID"是无效值,必须替换为目标AP的真实SSID,否则AP和目标设备都会忽略这个帧。
3. 自定义Dot11EltRates存在风险
Scapy已经内置了标准的Dot11EltRates实现,自定义类可能存在字段解析偏差(比如长度字段的处理)。建议直接用内置的Dot11Elt类型指定速率:
Dot11Elt(ID=1, info=b'\x0c\x12\x18\x24\x30\x48\x60\x6c')
4. 关联请求的能力字段(cap)可能不匹配
cap=0x1100可能不符合目标AP的能力要求,建议改为更通用的配置,比如0x0410(表示ESS网络+支持CFP),或者先通过Wireshark捕获合法的关联请求帧,复制其cap值。
修正后的代码示例
from scapy.all import * # 配置正确的参数 src_sta_mac = "4c:5e:0c:11:01:95" # 本地注入网卡MAC dst_ap_mac = "d0:39:57:b8:a8:bf" # 目标AP的MAC target_ssid = "Real_AP_SSID" # 目标AP的真实SSID # 构造符合标准的关联请求帧 packet = Dot11( addr1=dst_ap_mac, # 接收方是AP addr2=src_sta_mac, # 发送方是本地STA addr3=dst_ap_mac # BSSID等于AP的MAC ) / Dot11AssoReq( cap=0x0410, # 通用能力字段 listen_interval=0x000a ) / Dot11Elt( ID=0, info=target_ssid # 正确的SSID ) / Dot11Elt( ID=1, info=b'\x0c\x12\x18\x24\x30\x48\x60\x6c' # 标准速率字段 ) # 发送数据包,指定速率确保兼容性 sendp(packet, iface="wlan0mon", rate=6, verbose=1) packet.show()
额外排查点
- 确认两块网卡在同一频段(2.4G或5G),不能跨频段使用相同信道号
- 调整网卡发射功率:
sudo iw dev wlan0mon set txpower fixed 20(单位dBm) - 用Wireshark同时捕获两端的流量,对比本地发送的帧和目标端是否有接收痕迹
内容的提问来源于stack exchange,提问作者Filip Vuković
相关产品推荐
相关产品推荐

