python dns.resolver получить тип записи DNS - PullRequest
1 голос
/ 05 мая 2011

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

Спасибо,

Джим

Ответы [ 5 ]

2 голосов
/ 12 июля 2017

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

>>> import dns.resolver
>>> answer = dns.resolver.query('google.com')
>>> rdt = dns.rdatatype.to_text(answer.rdtype)
>>> print(rdt)
A
2 голосов
/ 05 октября 2013

Вот пример 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).

1 голос
/ 28 января 2014

Единственная проверка, которую я нашел до сих пор, чтобы определить, является ли это ответом 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 голос
/ 06 мая 2011

Как насчет этого?

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 голосов
/ 06 мая 2011

Похоже, вам нужно бросить свой собственный класс Resolver. Объекты ответа, возвращаемые вызовом 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
...