Используя модуль dnspython, можно получить список всех адресов определённого домена. В качестве примера, узнаем IP адреса домена ya.ru. Сам модуль нужно будет сначала установить: pip install dnspython
.
В самом простом варианте код будет выглядеть так:
import dns.resolver
for ip in dns.resolver.resolve('ya.ru', 'A'):
print(ip.address)
Здесь используется функция resolve()
модуля dns.resolver, первым аргументом которой служит строка с доменом, а вторым — строка с типом DNS записи, которую нужно получить, опросив dns-сервер, к которому припаркован домен.
Доменное имя (ya.ru в примере) указывается без протокола http(s). Чтобы получить IPv6 адреса, нужно указать во втором параметре строку 'AAAA'
.
import dns.resolver
for ip in dns.resolver.resolve('ya.ru', 'AAAA'):
print(ip.address)
Можно также выполнять запросы асинхронно. Однако, пример будет чуть сложнее. Во-первых, нужно будет импортировать модуль asyncio. Во-вторых, определить асинхронную функцию, которая будет запущена с помощью asyncio.run()
.
import asyncio
import dns.asyncresolver # type: ignore
async def main() -> tuple[str]:
return tuple(ip.address for ip in await dns.asyncresolver.resolve('ya.ru', 'A'))
if __name__ == '__main__':
ip_address_list = asyncio.run(main())
for ip in ip_address_list:
print(ip)
Здесь функция main()
возвращает кортеж строк, содержащих ip адреса, сформированный с помощью выражения generator expression.