我一直在使用RFC 1035.4.1.3作为DNS RR格式的参考: http://www.freesoft.org/CIE/RFC/1035/42.htm
RFC表示RDLENGTH是“无符号的16位整数,它指定RDATA字段的八位字节长度”,但在数据报中我得到的RDLENGTH有时比它应该少2。我已经检查过wireshark以确保我正确获取数据报。这是我在查找谷歌时获得的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类型的这类事情吗?)
提前感谢任何提供建议的人。 :)
答案 0 :(得分:2)
响应数据似乎搞砸了 - RDLENGTH应该是18(0x00 0x12),或者RDATA应该是不同的。
我刚从这里运行了一些谷歌查找,我没有看到这个问题。 我得到RDLENGHT 7和RDATA匹配(压缩名称)。
您的数据包数据是否有问题?