Как узнать IP адрес с помощью Python

Используя модуль 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.