5

我一直在 Wireshark 中查看 DNS 响应数据包,但无法理解答案和权威部分的十六进制编码。

考虑 DNS 查询:mail.abcd.com

答案部分包含名称字段,其十六进制编码因以下而异:

 0xc00c
 0xc012

它们都导致在字段中填充整个名称。

权威部分还包含名称字段,但其十六进制编码通常为:

 0xc010

这导致 abcd.com 被填充到该字段中。

谁能说出填充这些字段所遵循的约定是什么,因为它非常令人困惑。

谢谢

4

3 回答 3

9

DNS 标签使用<length><data ...>.

一个标签最多可以有 63 个字节长,因此该<length>字段还剩下两位。这些用于对标签类型进行编码。

如果前两位是,0b11则其余六位将与以下字节组合形成压缩指针,该压缩指针是 DNS 有效负载内到另一个标签的先前实例的偏移量。

由于 DNS 协议标头长 12 个字节,因此最短的合法偏移量是 12 个字节,给出您在上面看到的0xc00c.

[从技术上讲,人们可能会构造一个指向标头的压缩指针,但它并不严格符合协议]。

我强烈建议不要尝试从电报包中对规范进行逆向工程——你将不可避免地错过一些东西。只需阅读RFC 1035 - 所有核心内容都在其中。

于 2012-03-26T09:24:11.700 回答
5

阅读规范中的名称压缩。0xc、0x12 和 0x10 是指向数据包中名称“mail.abcd.com”和“abcd.com”的早期副本的指针。

于 2012-03-26T00:58:13.900 回答
0

来自 DNS 的名称压缩技术

DNS 消息使用偏移值来表示在消息开始后多少字节我们可以找到已经包含在消息中的域名。

在此处输入图像描述

其中“起始字节的地址”从整个消息的开头开始以字节为单位计数。以零作为第一个字节开始计数

所以在我们的例子中 0xC00C 是 1100 0000 0000 1100 这意味着 1100 偏移量是从整个 DNS 消息开始的12 个字节。

于 2018-12-25T07:16:18.243 回答