python dns.resolver 获取 DNS 记录类型
我正在学习如何使用Python的DNS对象。有个简单的问题,我看到很多例子展示了如何用dns.resolver方法来处理不同类型的DNS记录(比如CNAME、NS等)。请问有没有办法用这个DNS对象来查询一个DNS名称,并获取它的解析结果和记录类型?就像DIG命令在回答部分提供的那样。
谢谢,
吉姆
5 个回答
2
到目前为止,我找到的唯一方法来判断这是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..."
3
这里有一个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记录)。
5
你可以通过 rdatatype
来获取类型
>>> import dns.resolver
>>> answer = dns.resolver.query('google.com')
>>> rdt = dns.rdatatype.to_text(answer.rdtype)
>>> print(rdt)
A