2009-11-25 66 views
0

我已经使用RFC 1035.4.1.3作为DNS RR格式的引用: http://www.freesoft.org/CIE/RFC/1035/42.htmDNS CNAME类型记录有不正确的RDLENGTH字段?

的RFC说RDLENGTH是但在“指定在RDATA字段的字节长度的无符号16位整数”我得到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 0℃(指针www.google.com早些时候DGRAM)
然后键入: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类型的这种东西吗?)

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

回答

2

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

我刚刚从这里跑了几个谷歌查找,我没有看到这个问题。 我得到7的RDLENGHT和RDATA匹配(压缩名称)。

是什么东西搞乱你的包数据?

+0

:( 似乎一夜之间已经纠正了自己。现在的报告×12。难道我的路由器做一些奇怪的? 感谢您的回答,我真的准备拉我的头发在那里。现在我m只是困惑,我检查了很多东西,现在它们都在工作。 – Khatharr 2009-11-25 21:02:25

+0

典型的低端路由器和CPE通常不正确地代理DNS协议,请参阅RFC 5625。 – bortzmeyer 2009-11-27 09:30:54