python dns.resolver получить тип записи DNS

1

Я изучаю, как использовать объект dns python. Быстрый вопрос, поскольку многие примеры показывают методы использования метода dns.resolver с типом записи DNS (CNAME, NS и т.д.). Есть ли способ использовать этот объект dns для запроса имени DNS и вывести его разрешение с типом записи. Подобно тому, как DIG поставляется в разделе ответов.

Спасибо,

Джим

  • 0
    Я возился с rdtype и rdclass, но каждый тест, который я делаю, возвращает тип записи A, хотя, когда я сравниваю его с Dig, это не запись A.
Теги:
dns

5 ответов

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

Вы можете получить тип с помощью rdatatype

>>> import dns.resolver
>>> answer = dns.resolver.query('google.com')
>>> rdt = dns.rdatatype.to_text(answer.rdtype)
>>> print(rdt)
A
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..."
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>}
0

Похоже, вам нужно перевернуть собственный класс 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню