如何解码HDLC数据包中的未知CRC或替代16位校验码?
识别HDLC帧中未知16位校验码的方法
问题背景
我正在复现从设备接收的HDLC消息,目前已确定除校验码外的全部内容。消息以标准HDLC 0x7E标志分隔,帧结构为:1字节地址段、1字节控制段、4-8字节可变信息段、2字节16位校验码。最初认为是CRC-16,但经过多轮排查均不匹配已知CRC算法。
已尝试的排查手段
- 用fastcrc、reversebox模块遍历所有CRC-16算法,调整MSB/LSB、字节序,尝试包含/排除标志位计算,均未匹配
- 使用RevEng工具扫描,未找到对应CRC模型
- 尝试Fletcher校验和、BSD校验和,同样无效
- 已确认HDLC解码时已去除位填充,保留位填充的情况下计算也无匹配结果
样本数据
单帧样本(去除标志位,校验码位于末尾)
476000008000f510 476000c0c100f591 4760000081000b6e 47600040c000c623 47600000800221f2d3 47600000800411377a 47600000800c190a7c61 47600000801c99b6990fbf 47600000801e7f7fffffe37e
注:若需包含标志位,只需在帧前添加7E
完整多帧数据包(按7E分隔)
00 476000008000f510 476000008000f510 476000008000f510 476000008000f510 4760100080002cc1 9fffffffff
注:该数据包由1个起始帧、5个消息帧(最后一帧信息段1位翻转,校验码随之变化)、1个结束帧组成
求助需求
- 上述多帧通信模式是否能提示校验码的类型?
- 求可行的未知校验码识别方法(本人具备较强数学基础)
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

