В dnspython, учитывая IP-адрес DNS, как получить имя зоны DNS - PullRequest
0 голосов
/ 02 июня 2018

Используя библиотеку 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 Ответ

0 голосов
/ 02 июня 2018

Похоже, вы после обратного поиска 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)
...