0

我一直使用 RFC 1035.4.1.3 作为 DNS RR 格式的参考: http ://www.freesoft.org/CIE/RFC/1035/42.htm

RFC 说 RDLENGTH 是“一个无符号的 16 位整数,它指定 RDATA 字段的八位字节长度”但是在数据报中我得到的 RDLENGTH 有时比它应该的少 2。我已经检查了wireshark,以确保我正确获取了数据报。这是我在查找 google 时得到的 CNAME 记录:

C0 0C 00 05 00 01 00 03  95 FC 00 10 03 77 77 77
01 6C 06 67 6F 6F 67 6C  65 03 63 6F 6D 00

所以这就是名称:C0 0C(在 dgram 前面指向 www.google.com 的指针)
然后是类型:00 05(CNAME)
然后是类:00 01(IN)
然后是 TTL:00 03 95 FC(随便)

然后 RDLENGTH: 00 10 (那是 16 个字节,是吗?)

然后 RDATA:
03 77 77 77 01 6C 06 67 6F 6F 67 6C 65 03 63 6F 6D 00(www.l.google.com - 格式正确)

如您所见,RDATA 的长度为 18 个字节。18 个字节是 0x12,而不是 0x10。

之后出现的类型 A 记录正确地报告地址数据的 RDLENGTH 4。我在这里错过了什么吗?我会认为它是一个错误,但我为每个 DNS 服务器和每个域都得到了这个。

我想我真正要问的是为什么 RDATA 比 RDLENGTH 长,我应该遵循什么规则来适应它,这样我就可以解析任何类型的记录。(具体来说,我可以期待其他 RR 类型的这种事情吗?)

提前感谢任何提供建议的人。:)

4

1 回答 1

2

响应数据似乎搞砸了 - RDLENGTH 应该是 18 (0x00 0x12),或者 RDATA 应该不同。

我只是从这里运行了一些谷歌查找,我没有看到这个问题。我得到 7 的 RDLENGHT 和匹配的 RDATA(压缩名称)。

你的数据包数据有问题吗?

于 2009-11-25T13:22:29.513 回答