news 2026/10/2 7:17:03

wifit3 Driver ABC抽象基类:扩展新芯片必须实现的6个方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
wifit3 Driver ABC抽象基类:扩展新芯片必须实现的6个方法

wifit3 Driver ABC抽象基类:扩展新芯片必须实现的6个方法

【免费下载链接】wifit3Wifite but USB-only & cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3

wifit3 是一款仅依赖 USB 无线网卡、跨平台的 Wi-Fi 审计工具。它的硬件适配层由一个名为Driver的 ABC 抽象基类统一约束——想为 wifit3 扩展新芯片,核心工作就是继承这个基类并实现 6 个抽象方法。本文带你完整看懂这张“驱动契约”。

为什么 Driver 是 wifit3 的硬件核心

传统 Wi-Fi 工具依赖系统内核驱动,而 wifit3 选择了一条不同的路:用纯 Python 直接通过 USB 总线对话无线芯片,绕开各系统的驱动版本问题。因此每个受支持的芯片(Realtek RTL8187、MediaTek MT7610U、Ralink RT3070 等 20 多款)都在src/wifit3/chips/下有一个独立目录,目录里的driver.py全部继承同一个抽象基类:

  • 基类定义:driver.py
  • 目录约定(每个芯片的transport.py、rx.py、tx.py等分层模块):AGENTS.md
  • 已支持的 USB 网卡清单:SUPPORTED-HARDWARE.md

这个设计的直接好处是:UI 扫描器、战役模块(WPA 握手捕获、WPS、EvilTwin)只需面向Driver这一张接口编程,芯片差异被完全封装在各自目录内。

先认识“免费部分”:类属性与具体方法

抽象基类不只要求你实现方法,还自带一批开箱即用的能力:

类别成员说明
必选类属性SUPPORTED_CHANNELS芯片可调谐的所有信道(2.4G 为 1..14,5G 为 36..165),缺失会在子类定义时直接报TypeError
可选类属性FAKE_MAC芯片硬件自动 ACK 能力(NONE/FIXED_MAC/SPOOFABLE)
可选类属性CONFLICTING_LINUX_MODULESLinux 下需禁用的内核模块名
免费具体方法inject_frame()/inject_frame_slow_retry()发送原始 802.11 帧,带 ACK 探测与软件重传
免费具体方法enable_rx_acks()/record_ack()/acks_seen()ACK 计数台账,供慢速重传判定送达

也就是说,子类只负责“把芯片点亮并收发帧”,重传策略、ACK 统计这些通用逻辑基类已经写好。

必须实现的 6 个抽象方法

Python 会在实例化时强制校验:少实现一个都无法创建驱动对象。以下 6 个方法是每张网卡的“上岗证”:

1️⃣from_usb_device(dev, id_entry)—— 从 USB 设备构造驱动

类方法。发现模块通过 VID:PID 匹配到芯片后调用它,完成传输层包装与实例初始化。参考 rtl8187/driver.py 中的实现。

2️⃣register_rx_callback(cb)—— 注册收包回调

注册一个接收“每帧解析后 Packet”的回调,扫描器看到的每条信标都来自这里。

3️⃣register_disconnect_callback(cb)—— 注册掉线回调

RX 读取线程遇到致命错误(拔卡、USB 断开)时触发,供 UI 即时刷新。

4️⃣connect(progress_cb)—— 启动硬件(bring-up)

最重的一个方法:占用 USB 接口、读 EEPROM/EFUSE、冷启动或温启动、进入监听模式、启动 RX 循环,并沿途通过progress_cb报告 0..1 的进度。失败时应抛出BringUpError(stage, detail),而不是静默返回。

5️⃣set_channel(channel, scan)—— 调谐信道

切到指定信道;scan=True表示这是扫描中的临时跳频,允许走更轻量的路径。信道列表必须与SUPPORTED_CHANNELS保持一致。

6️⃣close()—— 停止并释放资源

停止 RX 循环、释放 USB 接口,让系统可以安全地重新接管设备。

私有钩子:把“收发”拆开实现

除了 6 个公开抽象方法,基类还预留了 4 个私有钩子供你填充具体行为,公共方法会替你编排好流程:

  • _inject_frame(frame_bytes):构建芯片 TX 描述符,经 bulk-OUT 发送一次;
  • _stamp_tx_seq(frame_bytes):打 802.11 序列号(芯片硬件自己编号的芯片可原样返回);
  • _enable_rx_acks()/_disable_rx_acks():让芯片把 ACK 控制帧放进 RX 流(有些芯片默认就放行,写一个“有文档说明的空操作”即可)。

这种“公共方法编排 + 私有钩子填充”的模式,是理解 wifit3 芯片移植风格的关键。

扩展新芯片的落地步骤

按 AGENTS.md 的“Adding a New Chipset”一节,完整流程只有五步:

  1. 新建src/wifit3/chips/<name>/包,至少包含__init__.py、driver.py、transport.py、constants.py(需上传固件的芯片再加firmware.py);
  2. 在__init__.py中声明SUPPORTED_IDS(VID:PID 列表)与延迟加载的import_driver(),且不要在模块顶层导入driver.py;
  3. driver.py继承Driver,定义SUPPORTED_CHANNELS,实现上文 6 个方法 + 4 个私有钩子;
  4. 仅在 setup key 与目录名不一致、或两个包共享 VID:PID(如 Realtek 主线/DKMS 对)时,才需在 device/manager.py 的_FAMILIES中加一行,其余注册全自动;
  5. 在驱动旁放一份芯片移植参考文档(模板见 CHIP-DOC.md)。

配套的方法论文档强烈建议精读:METHODOLOGY.md 讲如何以“内核 C 源码 + 录制的 USB 抓包”双基准做移植,CODE-STYLE.md 与 GOTCHAS.md 分别约定代码风格与历史踩坑。每款芯片的tests/chips/<芯片>/test_ack_detect.py等测试也是很好的行为参照。

小结

  • DriverABC(driver.py)是 wifit3 硬件层的统一契约:1 个必选类属性SUPPORTED_CHANNELS+ 6 个抽象方法 + 4 个私有钩子;
  • 基类免费提供了帧注入、ACK 台账、慢速重传等通用能力,子类专注芯片细节;
  • 发现机制基于pkgutil扫描 + 轻量__init__.py,新增芯片无需改注册表,真正做到“放一个目录即插即用”。

理解了这张契约,你既可以快速判断一张 USB 网卡能否被支持,也能动手为 wifit3 移植下一款芯片。

【免费下载链接】wifit3Wifite but USB-only & cross-platform.项目地址: https://gitcode.com/GitHub_Trending/wi/wifit3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 7:17:02

Unity接入DeepSeek流式传输实战:从API调用到逐字输出

做 Unity 项目的朋友&#xff0c;最近应该都在聊怎么把大模型塞进游戏里。我折腾了一段时间&#xff0c;把 DeepSeek 的 API 接进了 Unity 工程&#xff0c;并且实现了数据流式传输——就是那种 AI 对话不是干等好几秒然后一次性蹦出来&#xff0c;而是像 ChatGPT 网页版一样逐…

作者头像 李华
网站建设 2026/10/2 7:16:08

多无人机TDOA/FDOA无源定位与EKF跟踪的MATLAB实现

做定位的同学应该都有体会&#xff0c;TDOA&#xff08;到达时间差&#xff09;和FDOA&#xff08;到达频率差&#xff09;这两个词听着很熟&#xff0c;但真正要把两者揉进一个滤波器里&#xff0c;让无人机编队一边飞一边把辐射源的位置和速度持续估计出来&#xff0c;总是会…

作者头像 李华
网站建设 2026/10/2 7:15:51

从零搭建AI工程体系:数据、训练、评估、服务与观测五层实战

1. 从零搭建AI工程能力&#xff0c;到底在搭什么很多人第一次看到“ai-engineering-from-scratch”这个标题&#xff0c;脑子里冒出来的第一个念头是&#xff1a;是不是又要手撸一个Transformer&#xff1f;是不是得先把反向传播推一遍&#xff1f;我一开始也这么想&#xff0c…

作者头像 李华
网站建设 2026/10/2 7:15:08

二次型、正定矩阵与Hessian:理解矩阵核心概念的工程指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华