python dns.resolver获取DNS记录类型

时间:2011-05-05 19:29:36

标签: python dns resolver

我正在学习如何使用python dns对象。快速问题,因为我看到许多示例显示了使用DNS记录类型(CNAME,NS等)的dns.resolver方法的方法。有没有办法使用此DNS对象查询DNS名称并使用记录类型拉出它的分辨率。与DIG在答案部分中提供的内容类似。

谢谢,

吉姆

5 个答案:

答案 0 :(得分:2)

以下是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)。

答案 1 :(得分:2)

您可以使用rdatatype

获取类型
>>> import dns.resolver
>>> answer = dns.resolver.query('google.com')
>>> rdt = dns.rdatatype.to_text(answer.rdtype)
>>> print(rdt)
A

答案 2 :(得分:1)

这个怎么样?

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>}

答案 3 :(得分:1)

到目前为止我发现的唯一一个确定它是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..."

答案 4 :(得分:0)

看起来你需要推出自己的Resolver类。通过调用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