wifit3去认证帧构造源码解析:无ACK广播突发与MAC伪装的3个核心细节
【免费下载链接】wifit3Wifite but USB-only & cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3
wifit3 是一款跨平台、仅依赖 USB 无线网卡的 Wi-Fi 安全审计工具,内置纯 Python 无线协议栈,无需 aircrack-ng 即可构造注入 802.11 去认证帧(Deauthentication Frame)。本文带你读懂它的去认证帧构造源码:一帧字节如何拼装、无 ACK 的广播突发为何能"撒网"、MAC 伪装又是如何做到的——只需掌握 3 个核心细节。
一帧去认证报文长什么样
所有去认证帧都由 src/wifit3/dot11/deauth.py 中的build_deauth()构造,整帧仅 26 字节:帧控制字段(Deauth 子类型 0x0C)+ Duration/NAV 域 + 三个 MAC 地址 + 2 字节原因码。
源码中内置了一张标准原因码表(REASON_CODES),如7: "class3-from-nonassoc"、3: "deauth-leaving"。wifit3 主动去认时统一用原因码 7,而 PMKID 收割结束时发"离开"帧则用原因码 3,见 src/wifit3/campaigns/pmkid.py。
无ACK广播突发的秘密:NAV 置零 + 即发即忘
细节 1 藏在 src/wifit3/dot11/deauth.py 的deauth_nav_bytes():
- 广播/组播目的地→ NAV = 0,因为
ff:ff:ff:ff:ff:ff永远不会回 ACK; - 单播目的地→ NAV = 0x013A(约 314 µs),即 SIFS + 一个 1 Mbps 长前导 ACK 的占用时间,告诉周围设备"这段信道我预占了"。
芯片不会为监听模式注入的原始帧自动填 NAV,所以 wifit3 在帧里手工写入。随后 src/wifit3/wlan/interface.py 的deauth_broadcast()执行"广播突发":以目标 AP 的 MAC 为源,向广播地址连发 20 帧(BCAST_COUNT),每帧间隔 10ms,走send_no_wait()即发即忘通道——不等 ACK、不重传、不阻塞,最大化信道覆盖概率。
单播去认证:双向突击 + ACK 统计
细节 2 在deauth_client()(src/wifit3/wlan/interface.py):对每个客户端双向各发一帧——
- 伪装 AP 源 MAC → 发给客户端(客户端 ACK,RA 是被伪装的 AP MAC);
- 伪装客户端源 MAC → 发给 AP(AP ACK,RA 是被伪装的客户端 MAC)。
每轮调用send_until_ack(),驱动层通过enable_rx_acks()打开 ACK 计数(record_ack()只统计 RA 命中本次注入源 MAC 的控制帧),统计结果汇总进DeauthResult,界面上显示的client acks: x/y就来自这里,便于实时判断目标是否在线。
MAC伪装的四级能力模型
细节 3 是 src/wifit3/chips/driver.py 定义的FakeMacSupport枚举,把每款芯片的 MAC 伪装能力分为四级:
| 级别 | 含义 |
|---|---|
| SPOOFABLE | 可对任意伪造 MAC 做硬件自动 ACK |
| FIXED_MAC | 只能 ACK 网卡自身的 MAC |
| NONE | 硬件根本不支持 |
| UNIMPLEMENTED | 未移植(芯片也许支持) |
伪造地址由 src/wifit3/dot11/mac.py 的random_client_mac()生成:首字节0x02(本地管理的单播地址)+ 5 字节随机数。网卡选择器(src/wifit3/wlan/array.py)按 SPOOFABLE → FIXED_MAC → NONE → UNIMPLEMENTED 的优先级挑选 TX 网卡,多网卡时自动选攻击能力最强的一张。去认证攻击本身不需要伪装(无需关联),但 PMKID、WPS 等主动攻击则依赖这一层"主动监听模式"(enter_active_monitor())让芯片替伪造 MAC 回 ACK。
攻击编排:DeauthCampaign 的循环节奏
所有帧最终由 src/wifit3/campaigns/deauth.py 的DeauthCampaign编排:
- 前置检查:目标必须是 PSK 家族(AKM 0x02/0x04/0x06)且未强制 PMF(802.11w 会保护去认证帧);
- 每轮:轮流对每个客户端双向突发 10 轮(
BURST_ROUNDS)→ 等待 6 秒(SETTLE_SEC)让被动抓包捕获被"踢"出的重握手 → 再打 20 帧广播收尾; - 停止条件:监听端发现新增的可破解握手即自动停止,无需任何人工干预。
相关文件索引
| 模块 | 作用 |
|---|---|
| src/wifit3/dot11/deauth.py | 去认证/解除关联帧构造 + NAV 计算 |
| src/wifit3/dot11/mac.py | MAC 头拼装、随机伪造地址 |
| src/wifit3/wlan/interface.py | 广播/单播去认证注入、ACK 统计 |
| src/wifit3/campaigns/deauth.py | 去认证攻击循环编排 |
| src/wifit3/campaigns/pmkid.py | 使用"离开"去认证帧收尾的 PMKID 收割 |
| docs/SUPPORTED-HARDWARE.md | 各芯片 MAC 伪装能力一览 |
一句话总结:wifit3 的去认证帧构造 =极简 26 字节帧 + 按目的地类型精确填充 NAV + 广播即发即忘突发,再叠加按芯片能力分级的 MAC 伪装,让被动抓包与主动注入在同一套纯 Python 协议栈里协同工作。
【免费下载链接】wifit3Wifite but USB-only & cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考