В dnspython, учитывая IP-адрес DNS, как получить имя зоны DNS
С использованием dnspython
библиотека, у меня есть этот простой код, учитывая IP-адрес DNS, я могу запросить доменное имя. Мне нужно получить имя зоны DNS-сервера. Например, если вместо 8.8.8.8
У меня частный IP 192.168.4.5
для названной зоны com
и рассматриваемый сервер a.com
,
Как я могу получить com
в результате запроса на DNS-адрес моей зоны?
import dns.resolver
resolver = dns.resolver.Resolver()
resolver.nameservers = ['8.8.8.8']
def myQuery(domain, records):
for r in records:
try:
response = resolver.query(domain, r)
for rData in response:
domainIP = str(rData)
print(domainIP)
break # we only need one IP
except Exception as e:
print(e)
myQuery("google.com","A")
1 ответ
Похоже, вы после обратного поиска IP.
У вас есть IP, но вы хотите имя. Если это так, вы ищете запись типа PTR ( https://en.wikipedia.org/wiki/Reverse_DNS_lookup). Записи PTR выглядят так:
5.4.168.192.in-addr.arpa.
Вам не нужно знать об этом, так как есть вспомогательная функция dns-python с именем reversername, которая сгенерирует эти имена из IP-адреса для вас. Вот пример обратного просмотра IP 8.8.8.8:
>>> from dns import reversename, resolver
>>>
>>> rev_name = reversename.from_address('8.8.8.8')
>>> reversed_dns = str(resolver.query(rev_name,"PTR")[0])
>>> print reversed_dns
google-public-dns-a.google.com.
Чтобы заставить его работать на вашем частном сервере, вам нужно убедиться, что вы или ваша система добавляете / создаете записи PTR при регистрации ваших машин с DNS. Предполагая, что у вас есть записи PTR в вашем DNS, это должно работать для вас:
from dns import reversename, resolver
rev_name = reversename.from_address('192.168.4.5')
reversed_dns = str(resolver.query(rev_name,"PTR")[0])
print(reversed_dns)