81 lines
3.8 KiB
Markdown
81 lines
3.8 KiB
Markdown
# hostdemo 攻坚总结 — 真机 Butler .1 主机侧仿真全链路打通
|
||
|
||
**日期**:2026-09-10 晚 ~ 09-11 凌晨
|
||
**结论**:✅ 认领 + RDM 设备发现(3/3)+ DMX 呼吸控制(灯光肉眼确认)
|
||
**代码**:`HOSTDEMO_MODE=slfull`(src/hostdemo.rs),commit fcb20a7/3056a69
|
||
|
||
---
|
||
|
||
## 一、最终工作配方
|
||
|
||
```
|
||
1. 发现: type=1 (180B) → 217B 应答
|
||
2. 认领: announce144 (=102B 身份帧) 单播 → 47B 注册应答
|
||
→ AECH 质询 (nonce/B12 自选随机) → AERE = G(nonce) ✓
|
||
3. 循环 verbatim 重放 SL 真实会话帧流 (32540 帧 / 126.7s):
|
||
- DMX 数据帧: 保留 SL 原帧全部结构, 仅替换 r1/r2 + 密文段
|
||
(呼吸图案用本次认领的 B12 重加密 → Butler 解密上灯)
|
||
- RDM 请求: SL 原帧原样 (UN_MUTE / UNIQUE_BRANCH / GET, ff+fe 成对)
|
||
4. 被动解码应答: DISC 脉冲 → UID; DEVICE_INFO / START_ADDRESS → DMX 地址
|
||
```
|
||
|
||
**实测**:3/3 灯具发现(NFS1K2D@101/2ch、NFM680S@123、HMKJ@1/32ch,
|
||
应答 15.5k 帧)+ 三色异相呼吸(fade-in),**灯光肉眼确认**。
|
||
|
||
运行方式:
|
||
```
|
||
set HOSTDEMO_MODE=slfull
|
||
set REPLAY_FILE=<重放清单.txt> (tshark 提取: time|dst|dstport|payload)
|
||
enet-validator hostdemo 192.168.123.1 480
|
||
```
|
||
|
||
---
|
||
|
||
## 二、假设-证伪链(当晚完整过程)
|
||
|
||
| # | 假设 | 实验 | 结果 |
|
||
|---|---|---|---|
|
||
| 1 | 认领后需长前奏 | 45s discovery/announce 广播 | ❌ 无效 |
|
||
| 2 | 需要 sub=07 绑定帧 | 按实测节奏重放 ×4 | ❌ 无效 |
|
||
| 3 | 宣告时间戳过期被拒 | live 模板 + 新鲜时间戳 | ❌ 无效 |
|
||
| 4 | 会话保持 ~2h 需等待 | 45→86 分钟轮询探针 | ❌ 超时后仍拒 |
|
||
| 5 | 1947 密钥/EUCE 6s 节奏门控 | 会话内补发 | ❌ 单独无效 |
|
||
| 6 | RDM 帧字段差异 | 模板 vs 实帧 0 差异 | ❌ 排除 |
|
||
| 7 | **verbatim 重放二分** | 阶段 A(无认领)/B(先认领) | ✅ **B 全通** |
|
||
|
||
**教训**:帧级逐字节比对全通过后仍被拒时,问题在会话状态层——
|
||
用 verbatim 重放做二分是定位此类问题的最快路径。
|
||
|
||
---
|
||
|
||
## 三、深层发现(已写入协议文档 §3.7/§11.7)
|
||
|
||
1. **AECH 握手成功 ≠ 会话通道打通**:47B/AERE 全过但自构造 type=4 帧被静默丢弃;
|
||
verbatim 的 SL 历史帧立即全通 → Butler 在帧级校验某种会话一致性(规则未破解)。
|
||
2. **RDM 请求帧消息起始位置可变**:UN_MUTE@0x3A vs UNIQUE_BRANCH@0x3C
|
||
(前置 len16 字段浮动 2B)→ 固定偏移构造必被拒 → 重放绕过。
|
||
3. **announce144 == ident102**(同一帧两种称呼);真机冷启动序列:
|
||
广播前奏 → 身份帧 → 47B → AECH×3 → DMX+RDM(首应答延迟 ~1.4s 属正常)。
|
||
4. **1947 端口"密钥报文"** = 40B ASCII 许可令牌(安装级常量,双目标 21 帧 @200ms
|
||
每 ~34s 一轮);**EUCE** = 全程每 6s 的许可信标。
|
||
5. **灯具 MUTE 态跨会话持久**(SL 遗留 mute 挡后续 branch 查询)。
|
||
6. **密钥盘点**:nonce/B12 逐会话随机自主可控;G 表固定;1947 令牌安装级常量
|
||
(未做必需性消融)。详见协议文档 §3.7 密钥盘点表。
|
||
|
||
---
|
||
|
||
## 四、遗留事项
|
||
|
||
- [ ] RDM 帧变长结构规则(破解后可纯自构造帧发现,摆脱对 SL 原帧依赖)
|
||
- [ ] 1947 令牌必需性消融实验
|
||
- [ ] NFM680S 通道数应答漂移(2ch vs 1ch,疑查询时机差异)
|
||
- [ ] 会话级校验的具体算法(当前只知道"verbatim 能过")
|
||
|
||
## 五、产物清单
|
||
|
||
- 代码:`src/hostdemo.rs`(slfull/slclaim/sls/hybrid/replay 五模式)
|
||
- 重放清单:`replay_merged.txt`(sym_startup 101-520s + rdm3 全程,32540 帧)
|
||
- 抓包:`sym_startup.pcap`(认领+发现全程)、`sym_claim2.pcap`(接管+重启)、
|
||
`allports.pcap`(全端口,1947 发现)、`hd_claim3.pcap` 等
|
||
- 文档:`enet_protocol.md` §3.7/§11.7 本夜更新
|