Сообщить об ошибке.

Функции различных преобразований модуля socket в Python

Функции преобразований порядка байтов и IPv4/v6 в двоичный формат и обратно

В разделе рассмотрены определяемые модулем socket функции для преобразования порядка байтов 16-битных и 32-битных целых чисел, а также функции преобразования IPv4/v6 в упакованный двоичный формат и обратно.

Содержание:


socket.SocketType:

Класс socket.SocketType представляет собой объект типа Python, который возвращает тип объекта сокета.

Это то же самое, что и вызов type(socket(...)).

Функции преобразования 16 и 32-битных целых чисел.

В названиях этих функций - первая буква означает n - сеть, а h - хост, а последняя s - короткий, а l - длинный. Там, где сетевой порядок является порядком хоста, функции ничего делать не будут, но там, где машина перевернула байты, они соответствующим образом все поменяют.

socket.ntohl(x):

Функция socket.ntohl() преобразует 32-битные положительные целые числа x из сети в порядок байтов хоста.

На машинах, где порядок байтов хоста совпадает с порядком байтов в сети, функция ничего не делает, в противном случае выполняет 4-байтовую операцию подкачки.

socket.ntohs(x):

Функция socket.ntohs() преобразует 16-битные положительные целые числа x из сети в порядок байтов хоста.

На машинах, где порядок байтов хоста совпадает с порядком байтов сети, функция ничего не делает, в противном случае выполняет 2-байтовую операцию подкачки.

Устарело начиная с Python 3.7: В случае, если x не вписывается в 16-битное целое число без знака, но вписывается в положительное int языка C , оно молча усекается до 16-битного целого числа без знака. Функция молчаливого усечения устарела и вызовет исключение в будущих версиях Python.

Изменено в Python 3.10: вызывает OverflowError, если x не помещается в 16-битное целое число без знака.

socket.htonl(x):

Функция socket.htonl() преобразует 32-битные положительные целые числа x из хоста в сетевой порядок байтов.

На машинах, где порядок байтов хоста совпадает с порядком байтов в сети, функция ничего не делает, в противном случае выполняется 4-байтовая операция подкачки.

socket.htons(x):

Функция socket.htons() преобразует 16-битные положительные целые числа x из хоста в сетевой порядок байтов.

На машинах, где порядок байтов хоста совпадает с порядком байтов в сети, функция ничего не делает, в противном случае выполняется 2-байтовая операция подкачки.

Устарело начиная с Python 3.7: в случае, если x не подходит для 16-битного целого числа без знака, но подходит для положительного целого числа int языка C , оно автоматически усекается до 16-битного целого числа без знака. Функция тихого усечения устарела и вызовет исключение в будущих версиях Python.

Изменено в Python 3.10: вызывает OverflowError, если x не помещается в 16-битное целое число без знака.

Функции преобразования IPv4-адреса.

socket.inet_aton(ip_string):

Функция socket.inet_aton() преобразует IPv4-адрес из формата строки ip_string с точками, например, "123.45.67.89" в 32-битный упакованный двоичный формат в виде байтового объекта длиной четыре символа. Это полезно при взаимодействии с программой, которая использует стандартную библиотеку языка C и нуждается в объектах типа struct in_addr, который является типом C для 32-битного упакованного двоичного файла, который возвращает эта функция.

Функция socket.inet_aton() также принимает строки с менее чем тремя точками; подробности смотрите на странице руководства Unix inet(3).

Если строка адреса IPv4, переданная этой функции, недействительна, то возникнет ошибка OSError. Обратите внимание, что именно то, что допустимо, зависит от базовой C-реализации inet_aton().

Функция socket.inet_aton() не поддерживает IPv6, вместо нее следует использовать функцию socket.inet_pton(), которая поддерживает двойной стек IPv4/v6.

socket.inet_ntoa(packed_ip):

Функция socket.inet_ntoa() преобразует 32-битный упакованный IPv4-адрес packed_ip (байтовый объект длиной четыре байта) в его стандартное строковое представление с четырьмя точками (например, "123.45.67.89"). Это полезно при взаимодействии с программой, которая использует стандартную библиотеку C и нуждается в объектах типа struct in_addr, являющийся типом C для 32-битных упакованных двоичных данных, который эта функция принимает в качестве аргумента.

Если байтовая последовательность packed_ip, не имеет длины точно 4 байта, будет вызвана ошибка OSError.

Функция socket.inet_ntoa() не поддерживает IPv6, вместо нее следует использовать функцию socket.inet_ntop(), которая поддерживает двойной стек IPv4/v6.

socket.inet_pton(address_family, ip_string):

Функция socket.inet_pton() преобразует IP-адреса из строкового формата, специфичного для семейства, в упакованный двоичный формат. Функция полезна, когда библиотека или сетевой протокол вызывает объект типа struct in_addr, аналогично socket.inet_aton() или struct in6_addr.

Поддерживаемые значения для аргумента address_family в настоящее время - socket.AF_INET и socket.AF_INET6.

Если строка IP-адреса ip_string недействительна, то возникнет ошибка OSError.

Доступность: Unix (возможно, не все платформы), Windows.

socket.inet_ntop(address_family, packed_ip):

Функция socket.inet_ntop() преобразует упакованный IP-адрес packed_ip (байтовый объект с некоторым количеством байтов) в его стандартное строковое представление семейства (например, "7.10.0.5" или "5aef: 2b :: 8"). Это полезyj, когда библиотека или сетевой протокол возвращает объект типа struct in_addr, аналогично функции socket.inet_ntoa() или struct in6_addr.

Поддерживаемые значения для аргумента address_family в настоящее время - socket.AF_INET и socket.AF_INET6.

Если байтовый объект packed_ip имеет неправильную длину для указанного семейства адресов, то возникает ошибка ValueError.

Исключение OSError возникает при ошибках вызова socket.inet_ntop().

Доступность: Unix (возможно, не все платформы), Windows.