【免费下载链接】openpuck
Opensource firmware for NRF52840 Pro Micro that copycats the Steam Controller 2 Puck and adds an Xbox and Switch mode
OpenPuck RF Sniffer(puck_sniffer)是 OpenPuck 内置的一个 2.4 GHz被动式无线嗅探器:它只监听、绝不发射,因此不会干扰真实 Valve Steam Controller 2 Puck 与手柄的配对链路。它把嗅探到的每一帧数据包实时推送到浏览器可视化页面,让你零代码门槛地"看懂"这套无线协议 📡
为什么需要一个"被动"RF 嗅探器
OpenPuck 是一个跑在 nRF52840 Pro Micro 上的开源固件,用于复刻 Steam Controller 2 的无线接收器(puck),并额外提供 Xbox / Switch 等模式。它的核心难点之一是逆向还原puck 与手柄之间的 2.4 GHz 私有协议。
puck_sniffer模块就是为这个目标设计的抓包工具,位于 puck_sniffer/ 目录:
- 被动监听:只接收不发射,绝不干扰正在配对的设备
- 自动跟踪会话:真实 puck 会在公共信道上广播
E1信标帧,其中携带会话地址与频道;嗅探器读到后自动调谐,双向收包 - 学习并持久化绑定:把学会的会话参数写入 flash(
/sniffbonds.bin,按ibex_uuid索引),下次开机自动"蹲守",无需手动操作 - 浏览器实时可视化:通过 WebUSB 把帧流推送到网页,支持过滤、导出 JSON/文本
协议细节的完整描述见 docs/PROTOCOL.md,抓包器自身的说明见 puck_sniffer/README.md。
开始前的硬件清单
准备抓包只需三样东西:
- 第二块nRF52840 开发板(与烧录 OpenPuck 相同的 Pro Micro / Feather 均可)——注意:不是你的 OpenPuck 板子本身
- 真实的 Valve SC2 puck + 手柄,且已配对可用
- 支持 WebUSB 的浏览器:Chrome 或 Edge
💡 抓包时请把 OpenPuck 开发板拔掉,它自己也会广播信标,会"污染"公共信道 ch2 的接收。
一键烧录嗅探器固件
烧录命令与 OpenPuck 固件流程一致(固件源码:puck_sniffer/puck_sniffer.ino,复用同一套经过 CRC 验证的射频配置 puck_sniffer/radio.cpp):
arduino-cli compile -b adafruit:nrf52:feather52840 \ --build-property "build.extra_flags=-DNRF52840_XXAA {build.flags.usb}" \ --upload -p <PORT> puck_sniffer烧录成功后,板子会以 USB 标识28DE:534E "OpenPuck Sniffer"枚举。如果端口不自动复位,和烧 OpenPuck 一样走手动 DFU(双击复位键)即可。
最快打开浏览器可视化页面
WebUSB 要求安全上下文,所以file://协议直接双击打开的sniffer.html是连不上设备的。本地起一个静态服务即可:
cd docs && python3 -m http.server然后浏览器访问http://localhost:8000/sniffer.html(页面源码就在 docs/sniffer.html),点击Connect sniffer,选择OpenPuck Sniffer。
⚠️ Linux 用户如果连接失败,多半是 udev 权限问题,可按 docs/WEBUSB_LINUX.md 配置规则文件后重插设备。
连接成功后确认页面上rx计数在上涨,说明帧流已经到达浏览器 ✅
三步抓包:从 Lock 到 Power-cycle
这是整个流程的核心,顺序不能乱:
- 查询目标手柄的 ibex_uuid:用 pairtui/ 下的 USB 配对工具读取已连接槽位的
ibex_uuid(例如EF7171B4) - Lock:在页面
lock ibex输入框填入该 uuid,点击Lock- 如果
bond状态直接显示… camped,说明嗅探器已经"认识"这只手柄,直接跳到第 4 步 - 否则状态为ACQUIRE(正在 ch2 上等待该槽位的
E1信标)
- 如果
- ● Start Cap开始录制,然后给手柄断电重开(长按电源约 2 秒关到再开)。一旦捕获到
E1,嗅探器锁定会话、把 bond 写入 flash,bond统计显示1 learned · camped - 之后每次抓包只需重连:会话已学习的情况下,页面自动进入CAPTURE (auto-camped on learned bond)。此时只要给手柄断电重开,从第一个包起
C→P计数就开始爬升 - 晃动摇杆 / 触控板保持流量,在 Steam 里做你想抓的操作(调亮度、关机……),最后■ End Cap → Download
提示:手柄如果重新配对过(空中地址会变),点一下Forget bonds清空学习库,从下一个
E1重新学习即可。
浏览器过滤栏:从海量输入帧里"捞针"
真实链路上 99% 的流量是例行输入——49 字节的0xF1输入应答帧和裸0xE3轮询。可视化页面提供了完整的过滤栏,抓完之后随时可以改条件重新渲染:
| 过滤器 | 作用 |
|---|---|
| hide input/polls | 一键丢弃 99% 的例行流量,只剩命令、特性应答、信标和异常帧 |
| dir | 按方向过滤:P→C(puck→手柄,LED/关机/亮度命令走这里)或C→P(手柄→puck,输入+电量/遥测) |
| op | 精确匹配操作码,如f1、e3 |
| len | 按帧长过滤,≠ 49 (non-input)是找电量应答和特性响应的关键条件 |
| hex | 按载荷十六进制子串匹配,如9f、2d |
抓电量的标准姿势:先勾选hide input/polls+ dir 选C→P,然后在 Steam 里打开手柄设置页让 Steam 主动轮询电量——这时会出现一条 len > 49 的C→P长帧(携带 type-04 TLV),抓下它即可 🎯
导出数据与状态栏速读
点击Download JSON或Download text,会把 Start Cap 到 End Cap 之间的完整记录导出为sniff-<时间戳>.json/.txt,供离线分析或提交参考。
页面顶部状态栏建议关注几个指标:
- link:
ACQUIRE(扫描中)还是CAPTURE(已锁定会话) - E1 advertises:从
E1帧解析出的会话频道 / 地址(byte 9 = 频道,bytes 13–16 = base,byte 17 = prefix) - drops:设备端环形缓冲满导致的丢帧数,
0表示无损 - bond:已学习的 bond 数量与当前蹲守状态
遇到问题?两个快速排查点
- 断电重开后
C→P不涨:点Survey ch2,在表里看op e1的行,正常应能看到你手柄 uuid 的小端字节(EF7171B4→… b4 71 71 ef …)。如果只看到别的uuid,说明在重连的是 OpenPuck 或其它槽位,检查你的 OpenPuck 板子是否已拔掉 - 只在 ch2 看到
E1/E2,永远等不到0xF_应答:说明嗅探器没能蹲守到会话。从一条真实的E1帧里读出会话参数(base 4 字节、prefix、channel),填入pin session输入框(格式b0 b1 b2 b3 pfx ch)点Pin强制锁定,可完全绕开自动捕获——这是真实 puck 的E1偏移与 OpenPuck 不一致时最可靠的路径
总结
puck_sniffer用一块廉价的 nRF52840 板子 + 一个浏览器页面,就把"逆向私有 2.4 GHz 协议"这件听起来高深的事,变成了烧固件 → 锁 uuid → 断电重开手柄 → 导出 JSON的四步操作。被动设计让它可以安全地旁路监听真实设备,学习式 bond 蹲守机制让重复抓包变得几乎零操作,而浏览器端的方向 / 操作码 / 帧长 / hex 过滤则是从输入洪泛中定位关键帧的利器。相关源码与文档:puck_sniffer/README.md、docs/sniffer.html、docs/PROTOCOL.md。
【免费下载链接】openpuck
Opensource firmware for NRF52840 Pro Micro that copycats the Steam Controller 2 Puck and adds an Xbox and Switch mode
相关推荐
视频嗅探器浏览器哪个好用?MediaGo 中浏览器扩展、内置浏览器与手动抓包的全场景选型指南
视频嗅探器浏览器哪个好用?MediaGo 中浏览器扩展、内置浏览器与手动抓包的全场景选型指南 一句话结论 :普通网页优先用 Chrome/Edge 视频嗅探插件
音视频桌面应用后端深度评测:猫抓浏览器资源嗅探工具实战表现分析
深度评测:猫抓浏览器资源嗅探工具实战表现分析 作为一名长期关注网络资源管理工具的技术爱好者,我近期深度体验了猫抓这款基于Chrome平台的资源嗅探扩展。经过多场
音视频Faiss 向量检索:5 分钟搭好知识图谱实体链接
Faiss 向量检索:5 分钟搭好知识图谱实体链接 百万级实体做知识图谱链接时,提要和每个实体逐一比对,算不完、内存先炸。Faiss 向量检索就是解法:建一次索
机器学习搜索引擎向量数据库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考