0

虽然我对发明这个系统的人有很多话要说 *@%...我会保持简短。我正在调试一个简单的 ALG,它试图在 H323/H245 流中需要时打开端口并替换 IP。

我试图理解 H.245 PDU 的含义,但老实说,与 ITU-T 相比,RFC 非常容易理解......

所以我有以下H.245请求:038000012040212000400960864801650304010250c0116000060007b83 ...

在二进制中,它变为:

字节 1

0... 扩展 = 否

.00。要求

...0 扩展 = 不???

.... 0011 类型 3

字节 2

.... .... 1000 0000 扩展=是???

字节 3&4

.... .... .... .... 0000 0000 0000 0001 通道 ID = 2 (1+1)

字节 5&6

.... .... .... .... .... .... .... .... 0010 0000 0100 0000 ???

首先:我不明白为什么不使用字节 2,或者如果是,我不知道它是什么意思。另外,PER说如果大于2个字节,数字的编码必须是字节对齐的,所以通道ID不需要字节对齐......

其次,Wireshark 解码这个有一个 H235Media (DataType 7)。我真的不明白那里藏着一个七!

我用Colaso​​ft伪造了一些数据包,在Wireshark中打开,看起来数据类型应该存储在字节5的位0和字节6的位7、6、5(有12个选项,所以应该是编码为 4 位)。7 将是 0111。这种模式无处出现!

我发现字节 5 的位 6 表示端口号是否存在(根据 WS),好像我设置了那个位,字节 6 和 7 被解释为端口号,其余部分似乎被移动但没有当然是 8 的倍数……

这种编码可能是在计算机存在之前制作的,这就是为什么它真的不适合计算......玩偏移真的很痛苦......

非常感谢你的帮助!

4

1 回答 1

1

我的第一个建议是不要尝试手动解码 ASN.1 PER。解码 PER 甚至比 BER 更难。您应该让计算机进行解码以保持理智。信任 Wireshark - 它在解码方面做得非常好。

如果你真的想深入研究 ASN.1,这里有一本免费的 ASN.1 参考书

于 2016-02-12T19:50:23.590 回答