解码 HDLC 数据包中的未知 CRC

问题描述 投票:0回答:0

我目前正在尝试复制从设备接收到的一些 HDLC 消息,并且我已成功确定除 CRC 之外的全部内容。连续的消息由标准 HDLC 0x7E 标志分隔,并包含 1B 地址、1B 控制部分、可变数量的信息字节(4-8 之间)和 2B CRC-16(我实际上不确定它是一个CRC,但 HDLC 据说在帧末尾使用 CRC,而这个 2B 部分与您对 CRC 的期望完全不同)。我在这里看到了许多其他与 CRC 相关的问题,但我觉得我已经用尽了在那里找到的相关方法。

我试图通过对帧内容(不包括帧 CRC)运行许多已知的 CRC-16 算法并查看输出是否与帧 CRC 匹配来猜测它是什么 CRC。

fastcrc
reversebox
Python 模块中提供的 CRC-16 算法均未成功。我尝试了在帧内容和 CRC 中切换 MSB/LSB 和字节顺序的所有排列,以及在 CRC 输入中包含/不包含标志。然后我尝试使用 RevEng 来猜测 CRC,但无济于事(得到很多“未找到模型”,但我可能使用不正确......如果需要,我可以提供该代码以供参考)。

我不确定我还能尝试什么:是否有解码 CRC 的通用方法?我是 CRC 的新手,但我有很强的数学背景,因此欢迎提供技术解决方案。否则还有其他我没找到的好工具吗?

我可能在某些时候错误地进行了检查,因此我将提供一些示例消息(删除了标志,CRC 包含在最后 2 个字节中):

476000008000f510
476000c0c100f591
4760000081000b6e
47600040c000c623
47600000800221f2d3
47600000800411377a
47600000800c190a7c61
47600000801c99b6990fbf
47600000801e7f7fffffe37e

要包含该标志,帧只需在前面添加

7E
。可能值得注意的是,HDLC 解码涉及撤消位填充,但我尝试了保留位填充的快速 CRC 检查,但无济于事。

embedded crc crc16
© www.soinside.com 2019 - 2024. All rights reserved.