2011-04-29 36 views
0

我使用以下步驟:什麼是正確的方式來獲取負責某些主機的DNS服務器列表?

  1. 主機查詢記錄,有些服務器在權威部分返回NS記錄,所以我提取它們從部分(如有)。
  2. 查詢NS記錄,從答案部分提取它們。

問題是與 「亞結構域」(CNAME),例如:

> dig www.microsoft.com A

;; ANSWER SECTION: 
www.microsoft.com.  696  IN  CNAME toggle.www.ms.akadns.net. 
toggle.www.ms.akadns.net. 119 IN  CNAME g.www.ms.akadns.net. 
g.www.ms.akadns.net. 263  IN  CNAME lb1.www.ms.akadns.net. 
lb1.www.ms.akadns.net. 31  IN  A  65.55.12.249 

> dig www.microsoft.com NS

;; ANSWER SECTION: 
www.microsoft.com.  619  IN  CNAME toggle.www.ms.akadns.net. 
toggle.www.ms.akadns.net. 42 IN  CNAME g.www.ms.akadns.net. 
g.www.ms.akadns.net. 186  IN  CNAME lb1.www.ms.akadns.net. 

;; AUTHORITY SECTION: 
akadns.net.    174  IN  SOA  internal.akadns.net. hostmaster.akamai.com. 1304057105 90000 90000 90000 180 

> dig lb1.www.ms.akadns.net A

;; ANSWER SECTION: 
lb1.www.ms.akadns.net. 79  IN  A  65.55.12.249 

> dig lb1.www.ms.akadns.net NS

;; AUTHORITY SECTION: 
akadns.net.    176  IN  SOA  internal.akadns.net. hostmaster.akamai.com. 1304057402 90000 90000 90000 180 

正如你所看到的,有沒有NS記錄返回。如何克服這個問題?

回答

1

你的算法是錯誤的。這是正確的。

對於目標域名T的各自相繼短超級域S,與T開始自己:

  1. S執行NS查找。如果答案不是非空資源記錄集,請轉至步驟3.否則,您有一組中間域名D[]
  2. D[]中的每個名稱執行AAAAA查找。這會給你一組IP地址。你有你的答案。 END
  3. 可選擇在S上執行SOA查找。如果答案是非空資源記錄集,那麼您即將跨越一個行政邊界,到目前爲止,沒有發現非空的NS資源記錄集。您可以根據您正在嘗試查找的內容選擇ABEND

請記住,你必須讓查詢自己resolving proxy DNS server,而不是外部內容的DNS服務器,使你得到一個complete answer,而不是局部的。另外請記住,在檢查響應時,您必須遵循CNAME鏈。例如,對上述dig www.microsoft.com. NS查詢的響應是CNAME鏈,導致空的NS資源記錄集爲lb1.www.ms.akadns.net.

+0

謝謝!已經採用了類似的算法,但現在我知道如何做對了。 – actual 2011-05-17 13:35:49

相關問題