我一直在查看Wireshark中的DNS响应包,但无法理解答案和权威部分的十六进制编码。
考虑mail.abcd.com的域名系统查询
答案部分包含名称字段,该字段的十六进制编码因以下情况而异:
0xc00c
0xc012
这两种方法都会导致字段中填充整个名称。
权威部分还包含name字段,但该字段的十六进制编码通常为:
0xc010
这会导致在字段中填充abcd.com。
谁能告诉我填充这些字段所遵循的约定是什么,因为它非常令人困惑。
谢谢
发布于 2012-03-26 17:24:12
DNS标签使用<length><data ...>
格式。
标签的最大长度可以是63字节长,因此<length>
字段有两个剩余比特。它们用于对标签类型进行编码。
如果最高的两个比特是0b11
,则剩余的六个比特改为与随后的字节组合形成压缩指针,该压缩指针是DNS有效载荷内到另一标签的先前实例的偏移。
因为DNS协议报头是12字节长,所以最短的合法偏移量是12字节,给出了您在上面看到的0xc00c
的值。
从技术上讲,人们可能会构造一个指向头部的压缩指针,但它并不严格符合协议。
我强烈建议不要试图从有线数据包中对规范进行逆向工程--您将不可避免地遗漏一些东西。只需阅读RFC 1035 -所有的核心内容都在那里。
发布于 2012-03-26 08:58:14
请阅读规范中有关name compression的内容。0xc、0x12和0x10是指向数据包中名称"mail.abcd.com“和"abcd.com”的早期副本的指针。
发布于 2018-12-25 15:16:18
DNS消息使用偏移值来表示在消息开始后多少个字节,我们可以找到已经包含在消息中的域名。
其中“开始字节的地址”从整个消息的开头开始以字节计数。作为第一个字节,从零开始计数。
因此,在我们的示例中,0xC00C是1100 0000 0000 1100,这意味着距离整个DNS消息的开头12个字节的1100偏移量。
https://stackoverflow.com/questions/9865084
复制相似问题