DNS响应答案&权威部分

时间:2012-03-25 23:46:54

标签: dns response wireshark web-traffic network-traffic

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

考虑DNS查询:mail.abcd.com

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

而异
 0xc00c
 0xc012

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

权威部分还包含名称字段,但通常为:

的十六进制编码
 0xc010

这导致abcd.com在该领域居住。

任何人都可以告诉填充这些字段的惯例是什么,因为它非常令人困惑。

由于

3 个答案:

答案 0 :(得分:9)

DNS标签使用<length><data ...>格式。

标签最长可达63个字节,因此<length>字段剩余两个位。这些用于编码标签类型。

如果前两位是0b11,那么剩余的六位将与后面的字节组合成一个压缩指针,它是DNS有效负载内的一个偏移量,用于之前另一个标签的实例。

由于DNS协议标头长度为12个字节,因此最短的合法偏移量为12个字节,从而得出您在0xc00c之上看到的值。

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

我强烈建议反对尝试从有线数据包中反向设计规范 - 你将不可避免地错过任何东西。只需阅读RFC 1035 - 所有核心内容都在那里。

答案 1 :(得分:5)

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

答案 2 :(得分:0)

Name Compression technique from DNS

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

enter image description here

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

因此,在我们的示例中,0xC00C为110​​0 0000 0000 1100,这意味着1100偏移距整个DNS消息的开始为12个字节。