ARTICLE · 1063115
都是AI干的好事:开源一个能同时守三个信道、CONNECT_IND 零漏抓的 BLE 抓包器:BLEhound

项目落地:感谢nordic支持的nrf54lm20和nrf21540
做过 BLE 抓包的人多半都遇到过这件糟心事:设备明明连上了,Wireshark 里却看不到那条连接。
原因往往不是设备的问题,而是抓包器的物理极限——一个电台,一次只能听一个信道。而建连的那声 CONNECT_IND 会落在 37 / 38 / 39 三个广播信道里的某一个上。你守在 37,它偏偏发在 38,于是这条连接从起点就被漏掉,后面整条都跟不上。

我们把这件事从根上解决了,并且把整套东西开源了出来——BLEhound。

它是什么
BLEhound 是一个从零自研的 BLE 低功耗蓝牙抓包器。radio 寄存器全部自己配置,不用 Nordic 官方 sniffer 固件——这也是它能往「连接跟随」「加密抓密文」「三片同步」这些深水区走下去的前提。
它是一整套,不是只给固件让你自备开发板:
固件:Zephyr / nRF Connect SDK,跑在 nRF54LM20A(也兼容 nRF52840)。 Wireshark 插件:extcap,插上就在 Wireshark 里实时看包,用 Wireshark 自带的蓝牙解析器解全套协议栈。 开源硬件:一块带 nRF21540 FEM(PA/LNA) 的 USB dongle,KiCad/嘉立创工程、Gerber、BOM、3D 打印外壳全给。
招牌:三片同步多信道,零漏抓
一个电台听不了三个信道,那就用三个。三块板各死守 37 / 38 / 39,靠一根硬件 SYNC 线 + 片间 SPI 对齐时钟,上位机把三路合流、去重,最后汇成 Wireshark 里一个接口。

同步的关键是「共同时基」:任一片抓到边沿就在 SYNC 线上拉一下,三片都用硬件捕获同一个物理边沿,于是各自独立的时钟被对齐,三路包能拼成一条时间一致、无重复的流。

收益在弱链路上尤其明显:三片天线位置、噪声各自独立,某片丢包跟丢时另两片可能还在,合流不断线。真机 A/B 实测,开合流后每个连接事件抓满 2 包、存活比更高、零早失联。
抓到之后:跟得住、看得清
抓到 CONNECT_IND 只是开始。BLEhound 会跟着这条连接一路抓下去:
连接跟随:CSA #1/#2 跳频、连接参数更新、信道图更新,按 instant 精确生效;锚点按实收包重对齐,抗时钟漂移。 1M / 2M / Coded PHY,含连接内 PHY 切换跟随。 扩展广播建连( AUX_CONNECT_REQ)也能起跟。加密链路持续抓密文(加密不改跳频,照样跟得住),有 LTK 就能在 Wireshark 里解出明文;Legacy 配对还能被动破解出密钥。
每个包都带上信道、RSSI、µs 级硬件时间戳、CRC 结果、PHY,经 COBS 帧 + USB 送到上位机:


能抓哪些包:BLE 4.0 → 6.x 覆盖清单
从 4.0 到最新的 6.x,主流特性基本都覆盖。先来一张总览(✓ 真机验证 / ◐ 代码已就位、真机待触发 / ✗ 不支持或原理做不到):

下面按版本档展开,打✓的都在真机上验证过:
BLE 4.x 基础:全部 legacy 广播 PDU;抓到 CONNECT_IND起跟、CSA #1 跳频;信道图 / 连接参数更新按 instant 生效;从机延迟 / 监督超时按真实链路参数判失联;加密链路续跟(密文上送,注入 LTK 后在 Wireshark 解明文);Legacy 配对(Just Works / Passkey)被动暴破 TK → STK。BLE 5.0:2M PHY、Coded PHY(S2/S8 自动识别,连接跟随也过了真机)、非对称 PHY(主从方向不同、event 内逐包切)、CSA #2;扩展广播 AUX 链(ADV_EXT_IND → AUX_ADV_IND → AUX_CHAIN_IND);经扩展广播建连(AUX_CONNECT_REQ);周期广播同步。 BLE 5.1 ~ 5.4:LE Audio 等时流 BIS / CIS(逐 subevent 收,ISO 密文上送、重组在 Wireshark);连接子速率(5.3);PAwR(5.4,子事件 0 + 响应槽)。 BLE 6.0 ~ 6.2:帧间距协商(6.0);短连接间隔(6.2,125µs 单位、可到 375µs);决策广播过滤(6.0);扩展特性集、Channel Sounding 协商族、OTA UTP 等——识别、计数、原样上送,不挡跟随。
抓不到的,分两种:
原理上任何 sniffer 都做不到:LE Secure Connections(4.2+)的密钥(ECDH 私钥拿不到,只能注入已知 LTK);Channel Sounding 的测距(相位 tone 在 CS 信道、相对各自本振,第三方还原不出距离,只能看到 ACL 上的协商 PDU);加密后的 LL 控制 PDU(密文,跟丢只能靠重锁兜底)。 暂未实现 / 有条件:固件内不做 CCM 解密(故意——解密统一放 Wireshark);随机可解析地址(RPA)不解析(没注入 IRK,目标 MAC 过滤对轮换地址的设备失效);6.3 全新 LL PDU 没做专门解析(未知 opcode 原样上送、交给 Wireshark)。少数 LE Audio / PAST 项代码已就位,但缺对应信号源,真机还没触发。
诚实说边界
开源项目最忌吹。几条实话:
单片用,它和成熟的 Sniffle[1]、Nordic 官方 sniffer 同级;它的优势是带 FEM(距离更远)、更新的 nRF54 芯片、成品形态。 三片冗余在弱链路/丢包多时才明显;干净链路上单片就抓满了。 三机接力对扩展广播建的连接无效,也救不了加密控制包漏检(三片会同时漏同一个 instant)。 LE Secure Connections(BLE 4.2+)在数学上无法被动破解——任何 sniffer 都做不到。仅对你有权测试的设备使用。
彩蛋:还能当低成本射频测试台
因为它本身是个完整的 BLE 端 + 可控电台,同一套硬件还能兼作低成本、相对/黄金参考级的 BLE 射频测试台:让一片 nRF 当中心连被测设备、跑正常量产固件,靠协议自带的 ACK 反推接收 PER 做相对灵敏度;配 SDR 还能测频偏/调制。适合固件射频回归、批次一致性、产线好坏筛选——认证级另说,那要专业仪器。
开源硬件:一块能装进壳里的 dongle
板子是 3× nRF54LM20A + nRF21540 FEM 的 USB dongle。真机长这样——三片各带一颗 nRF21540 FEM 和一个 SMA 天线口,每片一排 SWD 调试排针、六颗按键、底部一个 USB-C:

再对照整块板的框图:

几处硬件上的讲究:
每片 SoC 配一颗 nRF21540 FEM(PA/LNA),双天线口用 SMA 座(ANT2 默认不贴),射频簇的布局布线直接照抄 Nordic 官方 EK/DK,少踩匹配的坑。 三片靠一根开漏 SYNC 线共享时基:任一片抓到边沿就把线拉低,三片用硬件同时捕获同一个物理边沿——用内部上拉、免外接电阻。 片间是对等 SPI:三片两两点对点(AB / BC / CA 三条独立链,各 4 线 + 1 根 REQ),每片一个主口一个从口,不走共享总线。 USB 三合一:CH334F 4 口 hub 把三片的 USB-CDC 汇到一个 USB-C 上行口;整机总线供电(CC 各 5.1k 下拉),AP2112K LDO 把 +5V 转 +3V3,供三片 SoC + 三颗 FEM + hub。 板子 70 × 60 mm、6 层、含一阶 HDI 盲孔;射频无源件沿用官方 0201 封装(换成更大的封装,照抄来的坐标就站不住了)。
再配一个参数化 3D 打印外壳(OpenSCAD 源码 + STL + 切片文件都在):


一句实话:首批投产的 V1 板有两处引脚级小坑(SYNC 落在了没有 GPIOTE 的 P2 口、strap 接法致信道分工错),单片抓包不受影响、开箱即用;三机模式需要在调试排针上飞 11 根线返工。修正版 V2 把这些直接做进 PCB,正在收尾。返工怎么飞、脚位怎么排,仓库里都画清楚了:

还有件事得说明白:这些基本都是 AI 做的
坦白讲:这个项目的原理图设计、3D 外壳、软件的调试与测试,绝大部分是 AI(我在旁边把关)完成的。开源出来,一方面是工具本身有用,另一方面也想留个真实样本——AI 能把这类软硬件项目推到什么程度。
但正因为如此,有句话必须提醒:
AI 设计的原理图,不能完全相信;每一个细节都要自己追着问、对着数据手册逐条核。
上面这块板就是活教材,V1 里被 AI 想当然放过去、后来一条条揪出来的坑就有四处:
SYNC 放到了 P2 口——可 P2 恰恰是这颗芯片上唯一没有 GPIOTE、做不了边沿捕获的口,三片时基根本对不齐。 strap 接法接错——两片读到同一角色、映射错位,导致没有一片守 37。 USB hub(CH334F)的时钟——没搞清它能用片内振荡器,给它外挂了晶振;其实 XI(4 脚)接地选内部时钟、根本不用晶振(BOM 里那几颗晶振是给 SoC 的,不是给 hub 的)。 USB hub 的供电——总线供电的板子,PSELF(18 脚)必须悬空,却接成了地;接地 = 自供电模式,hub 会向主机误报供电状态,直接枚举失败,整块 dongle 都认不出来。
这些都不是玄学 bug,而是没有逐脚去翻数据手册的结果——有的只影响三机模式(单片抓包照常,飞线返工即可救),有的(比如 hub 供电)能让整块板一插上就没反应。
所以你若也用 AI 做硬件,务必对它出的每一张原理图较真:这个脚到底有没有这个外设能力?这个电源 / 时钟脚接法对不对?这个封装、这条网络是不是真连对了? 别默认它对,一个一个问过去。这块板的 V1,就是「没问够」的代价。
怎么拿
全部开源,Apache-2.0(代码)/ CERN-OHL-S(硬件):
代码仓:github.com/BLEhound/BLEhound 在线文档(中英双语):blehound.github.io
固件、Wireshark 插件、硬件工程、外壳、构建与使用说明都在里面。欢迎试、欢迎提 issue——尤其三机同步这条路,多一种中心/外设协议栈上的实测就多一分稳。
只对你拥有或获授权测试的设备使用。抓包与配对分析仅限合法授权场景。
引用链接
[1]Sniffle: https://github.com/nccgroup/Sniffle