Я изучаю, как использовать объект dns python. Быстрый вопрос, поскольку многие примеры показывают методы использования метода dns.resolver с типом записи DNS (CNAME, NS и т.д.). Есть ли способ использовать этот объект dns для запроса имени DNS и вывести его разрешение с типом записи. Подобно тому, как DIG поставляется в разделе ответов.
Спасибо,
Джим
Вот пример 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).
Вы можете получить тип с помощью rdatatype
>>> import dns.resolver
>>> answer = dns.resolver.query('google.com')
>>> rdt = dns.rdatatype.to_text(answer.rdtype)
>>> print(rdt)
A
Единственная проверка, которую я обнаружил до сих пор, чтобы определить, отвечает ли это 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..."
Как насчет этого?
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>}
Похоже, вам нужно перевернуть собственный класс Resolver. Объекты Answer, возвращаемые вызовом dns.resolver.query, содержат только записи (записи), которые точно соответствуют запросу, который по умолчанию является записью A. Все это там, тропа теряется на этом пути. Если вы печатаете ответ, вы можете видеть, что я имею в виду.
#!/usr/bin/env python
import dns.resolver
answer = dns.resolver.query('www.clarkmania.com')
print answer.response
print "------"
print answer.rrset