# 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 ()](https://treasuremaster.gitbook.io/python-docs/moduli-standartnoi-biblioteki-1/setevoe-i-mezhprocessnoe-vzaimodeistvie/socket/funkcii-soketov/socket.socket). ***canonname*** будет строкой, представляющей каноническое имя хоста ***host***, если `AI_CANONNAME` является частью аргумента ***flags***; иначе ***canonname*** будет пустым. ***sockaddr*** - это кортеж, описывающий адрес сокета, формат которого зависит от возвращаемого семейства ***family*** (кортеж с 2 элементами `(address, port)` для [AF\_INET](https://treasuremaster.gitbook.io/python-docs/moduli-standartnoi-biblioteki-1/setevoe-i-mezhprocessnoe-vzaimodeistvie/socket/konstanty-soketov/socket.af_inet), кортеж с 4 элементами `(address, port, flowinfo, scope_id)` для [AF\_INET6](https://treasuremaster.gitbook.io/python-docs/moduli-standartnoi-biblioteki-1/setevoe-i-mezhprocessnoe-vzaimodeistvie/socket/konstanty-soketov/socket.af_inet6)) и предназначен для передачи в метод [socket.connect ()](https://treasuremaster.gitbook.io/python-docs/moduli-standartnoi-biblioteki-1/setevoe-i-mezhprocessnoe-vzaimodeistvie/socket/obekty-soketov/socket.connect).

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

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

```python
>>> 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` часть.
