Запросите массив записей DNS с помощью dnspython и перейдите к следующему элементу на основе заданного времени ожидания
Я запрашиваю кучу записей DNS с dnspython
кажется, что тайм-аут, когда ответ не получен (dns.exception.Timeout: The DNS operation timed out after 30.0006685256958 seconds
).
Вот функция:
def dnstest(domain):
dnsrecords = []
record_types = ['A', 'AAAA', 'CNAME', 'MX', 'SRV', 'TXT', 'SOA', 'NS']
dnsResolver = dns.resolver.Resolver()
for record in record_types:
dnsAnswer = dnsResolver.query(domain, record)
for rdata in dnsAnswer:
dnsrecords.append(rdata)
return(dnsrecords)
print(dnstest("github.com"))
тогда как, если я сделаю запрос на существующие записи DNS, ответ будет получен:dnsAnswer = dnsResolver.query(domain, 'A')
Я предполагаю, что это потому, что определенные записи (такие как SRV
, AAAA
и т. д.) не существует для github.com
, Тем не менее, они существуют для других доменов. Есть ли способ включить тайм-аут (например, 5 секунд) для запроса в пределах for
цикл?
Что-то вроде -if no response in 5 seconds, move to next element in the array
Или есть лучший подход для исключения несуществующих записей?
1 ответ
Следующее сработало для меня после некоторого быстрого поиска в Google.
import dns.resolver
def dnstest(domain):
dnsrecords = []
record_types = ['A', 'AAAA', 'CNAME', 'MX', 'SRV', 'TXT', 'SOA', 'NS']
dnsResolver = dns.resolver.Resolver()
dnsResolver.timeout = 1
dnsResolver.lifetime = 1
for record in record_types:
try:
dnsAnswer = dnsResolver.query(domain, record)
for rdata in dnsAnswer:
dnsrecords.append(rdata)
except:
pass
return(dnsrecords)