☰
Airgorah 厂商识别揭秘:编译期生成 OUI 表,MAC 地址秒变设备品牌
2026/9/28 20:47:57 网站建设 项目流程

Airgorah 厂商识别揭秘:编译期生成 OUI 表,MAC 地址秒变设备品牌

【免费下载链接】airgorahA WiFi security auditing software项目地址: https://gitcode.com/gh_mirrors/ai/airgorah

在 Airgorah 这款 WiFi 安全审计软件中,「厂商识别」是一个不起眼却非常实用的细节:扫描到附近无线客户端时,界面会直接把每个 MAC 地址翻译成设备品牌,比如Apple、HUAWEI、TP-Link。这套能力来自一张在编译期生成的 OUI 厂商表,全程不联网、零延迟。本文带你揭秘它的完整实现原理。

什么是 OUI?为什么 Airgorah 需要它

MAC 地址的前 3 个字节(48 位中的前 24 位)叫做OUI(Organizationally Unique Identifier),由 IEEE 统一分配给各个硬件厂商。也就是说,只要知道一张设备的 OUI,就能反查它出自哪家厂商。

对做 WiFi 安全审计的 Airgorah 来说,这个能力很关键:

  • 📡 扫描到某个 SSID 下的客户端时,一眼看出是手机、电脑还是路由器;
  • 🔍 排查未知设备时,品牌信息比裸 MAC 地址更有判断价值;
  • ⚡ 识别发生在抓包线程内联完成,界面数据「开箱即完整」,GUI 无需二次补全。

编译期生成 OUI 表:vendors.csv 如何变成 HashMap

Airgorah 的厂商数据存放在一份 5 万多行的 CSV 文件里,格式为Mac Prefix,Vendor Name:

vendors.csv

00:00:0C,"Cisco Systems, Inc"/00:00:0E,FUJITSU LIMITED/00:00:1B,"Novell, Inc."…

真正的「魔法」发生在编译阶段。build.rs 作为 Cargo 构建脚本:

  1. 用csv库逐行解析vendors.csv;
  2. 把每行转写成map.insert("前缀", "厂商名")形式的 Rust 代码;
  3. 拼进一个lazy_static宏模板,写出到构建输出目录OUT_DIR/vendors.rs;
  4. 声明cargo:rerun-if-changed=vendors.csv,数据更新后自动重跑构建。

这样运行时得到的就是一张HashMap<&'static str, &'static str>,字符串全部编译进二进制,查询时没有任何 I/O 和解析开销。

find_vendor:从最长前缀逐级匹配

核心的查询逻辑只有二十多行,实现在 vendors.rs 的find_vendor函数中:

  • 先查缓存:每张 MAC 的解析结果会存入全局缓存VENDORS_CACHE(定义于 globals.rs),重复轮询零成本;
  • 逐级缩短前缀:从 13 字符的 MAC 前缀开始匹配,未命中就缩短一位再试。这既能覆盖标准的 24 位 OUI,也能匹配更长的 MA-M / MA-S 厂商注册;
  • 兜底返回:全部未命中则返回Unknown,并同样写入缓存。

整个查找只是几次哈希表探测,官方注释特意强调:不需要任何后台线程。

识别结果如何流入扫描界面

Agent 进程在嗅探线程中解析到客户端 MAC 时,就地调用find_vendor拿到品牌名,随后随快照一起上送 GUI。关键调用点在 sniffer.rs:

let vendor = find_vendor(station); upsert_client(&mut ap.clients, station, &power, &vendor, &now, probe);

于是你在扫描界面看到的客户端列表里,Vendor一列天然就有值——厂商识别模块对上层完全透明。

小结

Airgorah 的厂商识别是一套教科书式的「编译期预处理」设计:

环节做法收益
数据存储5 万+ 行 vendors.csv人类可读、易更新
编译期build.rs 生成静态 HashMap零运行时解析开销
运行时find_vendor 前缀匹配 + 缓存几次哈希探测即出结果
消费端sniffer.rs 内联解析GUI 快照开箱即完整

如果你正在为自己的 Rust 网络工具添加 OUI 反查能力,这套「CSV → build.rs → lazy_static → 前缀匹配 + 缓存」的方案值得直接借鉴。

【免费下载链接】airgorahA WiFi security auditing software项目地址: https://gitcode.com/gh_mirrors/ai/airgorah

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询