2012-03-25 87 views
4

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

考虑DNS查询:mail.abcd.com

答案部分包含名称字段,并为这个十六进制编码的不同而不同:

0xc00c 
0xc012 

他们都导致整个名称为在外地居住。

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

0xc010 

这导致abcd.com被填充在外地。

任何人都可以告诉填充这些字段的惯例是什么,因为它很混乱。

感谢

+0

希望有用:http://www.zoneedit.com/doc/rfc/ – sarnold 2012-03-25 23:51:24

回答

8

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

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

如果开头两个比特是0b11然后其余六个比特,而不是用下面的字节形式的压缩指针这是DNS有效载荷内的偏移量到另一个标签的现有实例合并。

由于DNS协议标头长度为12个字节,所以最短合法偏移量为12个字节,给出您在上面看到的值0xc00c。我们可以构造一个指向头部的压缩指针,但它并不严格符合协议。] []

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

+0

但是如果一个实现不符合标准呢?那可能吗? – Utku 2015-11-14 15:18:36

+0

这是可能的,但接收器应该将它视为格式错误的响应 – Alnitak 2015-11-15 02:21:27

3

说明书中的阅读上name compression。 0xc,0x12和0x10是指向包中名称“mail.abcd.com”和“abcd.com”的较早副本的指针。