dnspython — это библиотека Python, которая предоставляет инструменты для работы с DNS (Domain Name System). Она позволяет выполнять запросы к DNS-серверам, получать информацию о записях доменных имен, а также получение доменного имени по IP-адресу.
Еще по теме: Написание спуфера на Python для подмены почты
Использование библиотеки dnspython
Модуль dnspython предоставляет метод dns.resolver(), который позволяет найти несколько записей из доменного имени. Функция принимает доменное имя и тип записи в качестве параметров. Ниже приведены некоторые типы записей:
- Запись AAAA: это запись IP-адреса, которая используется для нахождения IP-адреса компьютера, подключенного к домену. Концептуально это похоже на запись A, но указывает только IPv6-адрес сервера вместо IP.
- Запись NS: Запись Name Server (NS) предоставляет информацию о том, какой сервер является авторитетным для данного домена, то есть какой сервер имеет фактические записи DNS. Для домена возможны несколько записей NS, включая основные и резервные серверы имен.
- Записи MX: MX означает запись обменника почты, которая является ресурсной записью, указывающей почтовый сервер, ответственный за прием электронных писем от имени домена. Она имеет значения приоритета в соответствии с приоритетизацией почты, если для балансировки нагрузки и повышения надежности присутствуют несколько почтовых серверов.
- Записи SOA: SOA означает начало авторитета, это тип ресурсной записи, который содержит информацию об управлении зоной, особенно относящуюся к передачам зоны, определенным администратором зоны.
- Запись CNAME: CNAME означает каноническую запись имени, которая используется для сопоставления доменного имени как псевдонима для другого домена. Она всегда указывает на другой домен и никогда не указывает непосредственно на IP.
- Запись TXT: Эти записи содержат текстовую информацию источников, которые находятся вне домена. Записи TXT могут использоваться для различных целей, например, Google использует их для подтверждения владения доменом и обеспечения безопасности электронной почты.
Этот модуль позволяет выполнять запросы записей на DNS-серверах.
Установка может быть выполнена либо через репозиторий Python, либо скачиванием кода с репозитория и запуском файла установки setup.py.
Самый быстрый способ установить — использовать репозиторий pip. Вы можете установить эту библиотеку с помощью команды:
1 |
$ pip install dnspython |
Основные пакеты для этого модуля:
- import dns
- import dns.resolver
Информацию, которую можно получить для определенного домена:
- Записи для почтовых серверов: response_MX = dns.resolver.query(‘domain’,’MX’)
- Записи для серверов имен: response_NS = dns.resolver.query(‘domain’,’NS’)
- Записи для IPV4-адресов: response_ipv4 = dns.resolver.query(‘domain’,’A’)
- Записи для IPV6-адресов: response_ipv6 = dns.resolver.query(‘domain’,’AAAA’)
В следующем примере мы используем метод resolve() для получения списка IP-адресов для множества хостовых доменов с помощью подмодуля dns.resolver.
1 2 3 4 5 6 7 8 |
import dns.resolver hosts = ["python.org", "google.com", "microsoft.com"] for host in hosts: print(host) ip = dns.resolver.resolve(host, "A") for i in ip: print(i) |
Для каждого домена мы получаем список IP-адресов.
Также можем проверить, является ли один домен поддоменом другого с помощью метода is_subdomain() и проверить, является ли домен наддоменом другого с помощью метода is_superdomain().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import argparse import dns.name def main(domain1, domain2): domain1 = dns.name.from_text(domain1) domain2 = dns.name.from_text(domain2) print("{} is subdomain of {}: {}".format(domain1, domain2, domain1.is_subdomain(domain2))) print("{} is superdomain of {}: {}".format(domain1, domain2, domain1.is_superdomain(domain2))) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Check 2 domains with dns Python') parser.add_argument('--domain1', action="store", dest ="domain1", default='python.org') parser.add_argument('--domain2', action="store", dest="domain2", default='docs.python.org') given_args = parser.parse_args() domain1 = given_args.domain1 domain2 = given_args.domain2 main(domain1, domain2) |
При выполнении предыдущего кода мы видим, что домен python.org является наддоменом mail.python.org.
Можно получить доменное имя по IP-адресу с использованием подмодуля dns.reversename и метода from_address().
Также можем получить IP-адрес по доменному имени с использованием подмодуля dns.reversename и метода to_address().
Основным отличием DNSPython по сравнению с другими инструментами запросов DNS, такими как dig или nslookup, является возможность контроля результата запросов из Python, а затем использование этой информации для других целей в скрипте.
Подробности в официальной документации.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Создание бэкдора на Python
- Как отправить поддельные СМС используя dnspython
- Получение информации о домене с WHOIS и DNS Python