2009-11-25 70 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