enet-validator/docs/hostdemo_recap_2026-09-10.md
OpenCode 9995335d74 feat: show mode for standalone 1-32 rainbow DMX + RDM status polling
- Merge show/hybrid paths: use dmx_a template for DMX payload and replay-extracted SL frame skeleton for RDM.
- HOSTDEMO_MODE=show runs indefinitely when secs=0; wave period slowed for smoother breathing.
- Update README with show mode usage.
2026-09-11 12:03:43 +08:00

3.8 KiB
Raw Blame History

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 本夜更新