В 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)
Другие вопросы по тегам