2013-03-25 41 views
6

我正在嘗試構建用於解析單個域名的所有DNS記錄的快速腳本。 'ANY'命令似乎可以解決問題,但是我遇到了TTL的一些奇怪的問題。當使用任何這樣的dnspython - 用一個查詢獲得AAAA,A,NS和其他記錄

domain = dns.name.from_text(domain) 
nameserver = '127.0.0.1' 
query = dns.message.make_query(domain, dns.rdatatype.ANY) 
response = dns.query.udp(query, nameserver, timeout = 2) 
print response 

返回的數據是我所需要的,但是當TTL過期腳本只是不返回過期的記錄。 'DIG域名任何'命令似乎也有這個問題。

所以我的問題是什麼是獲得單個域的所有DNS記錄的最快方法?

回答

6

ANY查詢的TTL問題是DNS協議固有的。一旦一個緩存有一個給定名稱的RRtype,它將返回它對ANY查詢的響應,而不是查詢源以查看是否還有更多。 RFC 2181對此有一個簡短的討論:

5.2。 RRSet中的RR的TTL

資源記錄還有生存時間(TTL)。 RRSet中的RR可能有不同的TTL。沒有這方面的用途 已被發現,不能以其他方式更好地完成。然而,這個 可以導致來自 高速緩存服務器的部分回覆(未標記爲「截斷」),其中對於RRSet中的一些但不是全部RR的TTL已經過期。

它實際上並沒有說在一個RRset中使用不同TTL的RR是不鼓勵的,但是作者顯然沒有高度評價這樣做。

所以簡短的回答是,鑑於ANY工作得不好,除了每RR類型發出一個您感興趣的查詢之外,沒有其他解決方案。通過並行處理所有這些查詢可以節省時間,這有助於(但是Python庫可能不會使這一點變得簡單)。

相關問題