![DNS 应答部分中 NAME 字段的格式是什么?](https://linux22.com/image/687678/DNS%20%E5%BA%94%E7%AD%94%E9%83%A8%E5%88%86%E4%B8%AD%20NAME%20%E5%AD%97%E6%AE%B5%E7%9A%84%E6%A0%BC%E5%BC%8F%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
RFC 1035 第 4.1.3 节中没有完整详细说明 NAME 字段。
我想(以编程方式)了解此字段的 ANSWER 消息类型,并且我搜索了这些资源(数据表)。
我已关注:
- IETF RFC 2181
- www.ccs.neu.edu
我是否遗漏了什么?
伪代码:
问题:
byte[]{
0x00,0x00,
0x01,0x00,
0x00,0x02,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x03,0x77,0x77,0x77,
0x12,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01,
0x13,0x74,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01
}
回答:
byte[]{
0x00,0x00,
0x81,0x80,
0x00,0x02,
0x00,0x01,
0x00,0x00,
0x00,0x00,
0x03,0x77,0x77,0x77,
0x12,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01,
0x13,0x74,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01,
0xC0,0x0C, <----- answer start here , i want to understand this value
0x00,0x00,
0x00,0x00,0x06,0xcf,
0x00,0x04,
0x07,0x00,0x00,0x01
答案1
DNS 答复部分中的 NAME 部分的格式与 DNS 问题部分的 QNAME 部分完全相同。
表示为标签序列的域名,其中每个标签由一个长度八位字节和其后的八位字节数组成。域名以零长度八位字节作为根的空标签的结尾。请注意,此字段可能是奇数个八位字节;不使用填充。
它还受第 4.1.4 节中的压缩方案约束,因此在典型的 DNS 响应中,您很可能在问题部分看到全名,并在答案部分看到指向它的指针。
您在问题中明确指出的部分是来自第 4.1.4 节的这些压缩值之一。高两位均设置为 1,其余值指向所引用的响应中的字节。在本例中是字节 12 (0x00c),它似乎是“www.the_nacketgeek.com”(这是问题部分中的 QNAME)。