我正在學習如何使用python dns對象。快速的問題,因爲我看到很多例子顯示了與DNS記錄類型(CNAME,NS等)一起使用dns.resolver方法的方法。有沒有辦法使用這個DNS對象來查詢DNS名稱並將其解析爲記錄類型。類似於DIG在答案部分提供的內容。python dns.resolver獲取DNS記錄類型
感謝,
吉姆
我正在學習如何使用python dns對象。快速的問題,因爲我看到很多例子顯示了與DNS記錄類型(CNAME,NS等)一起使用dns.resolver方法的方法。有沒有辦法使用這個DNS對象來查詢DNS名稱並將其解析爲記錄類型。類似於DIG在答案部分提供的內容。python dns.resolver獲取DNS記錄類型
感謝,
吉姆
看起來你需要推出自己的解析器類。通過調用dns.resolver.query返回的Answer對象只包含特定匹配請求的記錄,缺省情況下恰好是A記錄。一切都在那裏,一路上都失蹤了。如果你打印迴應,你可以看到我的意思。
#!/usr/bin/env python
import dns.resolver
answer = dns.resolver.query('www.clarkmania.com')
print answer.response
print "------"
print answer.rrset
這個怎麼樣?
In [1]: import dns.resolver
In [2]: dns.resolver.query('chipy.org').__dict__
Out[2]:
{'canonical_name': <DNS name chipy.org.>,
'expiration': 1304632023.2383349,
'qname': <DNS name chipy.org.>,
'rdclass': 1,
'rdtype': 1,
'response': <DNS message, ID 64039>,
'rrset': <DNS chipy.org. IN A RRset>}
這裏有一個CNAME的例子:
>>> cname = dns.resolver.query("mail.unixy.net", 'CNAME')
>>> for i in cname.response.answer:
... for j in i.items:
... print j.to_text()
...
unixy.net.
TXT:
>>> txt = dns.resolver.query("unixy.net", 'TXT')
>>> for i in txt.response.answer:
... for j in i.items:
... print j.to_text()
...
"v=spf1 ip4:..."
NS:
>>> ns = dns.resolver.query("unixy.net", 'NS')
>>> for i in ns.response.answer:
... for j in i.items:
... print j.to_text()
...
ns2.unixy.net.
ns1.unixy.net.
你可以遵循同樣的模式最紀錄。多個響應查詢存儲在列表中。所以循環有時是必要的(例如:多個A和NS recs)。
迄今爲止,我發現的唯一一個檢查來確定它是A還是CNAME答案是測試qname屬性是否等於canonical_name屬性。
answer = dns.resolver.query('www.example.com')
if answer.qname == answer.canonical_name:
print "This is A record"
else:
print "This isn't A, probably CNAME..."
你可以得到rdatatype
>>> import dns.resolver
>>> answer = dns.resolver.query('google.com')
>>> rdt = dns.rdatatype.to_text(answer.rdtype)
>>> print(rdt)
A
我與rdtype和rdclass但每次測試好惹的類型我做返回一個記錄類型,即使當我把它比作掏它不是A記錄。 – Jim 2011-05-05 19:33:40