socket.getaddrinfo ()

socket.getaddrinfo ( host, port, family=0, type=0, proto=0, flags=0 )

Преобразует аргументы host/port в последовательность из кортежа с 5 членами, которые содержат все необходимые аргументы для создания сокета, подключенного к этой службе. host - это доменное имя, строковое представление адреса IPv4/v6 или None. port - это строковое имя службы, такое как 'http', числовой номер порта или None. Передав None в качестве значения host и port, вы можете передать NULL в базовый API C.

Аргументы семейства family, типа type и прототипа proto могут быть дополнительно указаны, чтобы сузить список возвращаемых адресов. Передача нуля в качестве значения для каждого из этих аргументов выбирает полный диапазон результатов. Аргумент flags может быть одной или несколькими константами AI_* и будет влиять на способ вычисления и возврата результатов. Например, AI_NUMERICHOST отключит разрешение доменного имени и вызовет ошибку, если host является доменным именем.

Функция возвращает список из кортежа с 5 элементами со следующей структурой:

(family, type, proto, canonname, sockaddr)

В этих кортежах family, type, proto являются целыми числами и предназначены для передачи в функцию socket (). canonname будет строкой, представляющей каноническое имя хоста host, если AI_CANONNAME является частью аргумента flags; иначе canonname будет пустым. sockaddr - это кортеж, описывающий адрес сокета, формат которого зависит от возвращаемого семейства family (кортеж с 2 элементами (address, port) для AF_INET, кортеж с 4 элементами (address, port, flowinfo, scope_id) для AF_INET6) и предназначен для передачи в метод socket.connect ().

Вызывает событие аудита socket.getaddrinfo с аргументами host, port, family, type, protocol.

В следующем примере извлекается адресная информация для гипотетического TCP-соединения с example.org через порт 80 (результаты могут отличаться в вашей системе, если IPv6 не включен):

>>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
[(<AddressFamily.AF_INET6: 10>, <SocketType.SOCK_STREAM: 1>,
 6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
 (<AddressFamily.AF_INET: 2>, <SocketType.SOCK_STREAM: 1>,
 6, '', ('93.184.216.34', 80))]

Изменено в версии 3.2: параметры теперь можно передавать с помощью ключевых аргументов.

Изменено в версии 3.7: для адресов многоадресной рассылки IPv6 строка, представляющая адрес, не будет содержать %scope_id часть.

Last updated