ipaddress — Библиотека манипулирования IPv4/IPv6


ipaddress предоставляет возможности для создания, управления и работы с адресами и сетями IPv4/IPv6.

Функции и классы в данном модуле упрощают выполнение различных задач, связанных с IP-адресами, включая проверку того, находятся ли два хоста в одной и той же подсети, перебор всех хостов в подсети, проверку того, представляет ли строка допустимое значение IP-адреса или адреса сети и т. д.

Это полный справочник по API модуля — обзор и введение см. в статье Знакомство с модулем ipaddress.

Добавлено в версии 3.3.

Удобные фабричные функции

Модуль ipaddress предоставляет фабричные функции для удобного создания IP-адресов, сетей и интерфейсов:

ipaddress.ip_address(address)

Возвращает объект IPv4Address или IPv6Address в зависимости от IP-адреса, переданного в качестве аргумента. Могут быть указаны адреса IPv4 или IPv6; целые числа меньше 2**32 будут считаться IPv4 по умолчанию. Вызывается ValueError, если address не представляет допустимый адрес IPv4 или IPv6.

>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:db8::')
IPv6Address('2001:db8::')
ipaddress.ip_network(address, strict=True)

Возвращает объект IPv4Network или IPv6Network в зависимости от IP-адреса, переданного в качестве аргумента. address — это строка или целое число, представляющее IP-сеть. Могут быть предоставлены сети IPv4 или IPv6; целые числа меньше 2**32 будут считаться IPv4 по умолчанию. strict передаётся конструктору IPv4Network или IPv6Network. Вызывается ValueError, если address не представляет допустимый адрес IPv4 или IPv6 или если в сети установлены биты узла.

>>> ipaddress.ip_network('192.168.0.0/28')
IPv4Network('192.168.0.0/28')
ipaddress.ip_interface(address)

Возвращает объект IPv4Interface или IPv6Interface в зависимости от IP-адреса, переданного в качестве аргумента. address — это строка или целое число, представляющее IP-адрес. Могут быть указаны адреса IPv4 или IPv6; целые числа меньше 2**32 будут считаться IPv4 по умолчанию. ValueError возникает, если address не представляет допустимый адрес IPv4 или IPv6.

Одним из недостатков данных удобных функций является предоставление минимальной информации о точной ошибке, поскольку функции не знают, какой формат предназначался для IPv4 или IPv6. Более подробные отчёты об ошибках можно получить, напрямую вызвав соответствующие конструкторы класса для заданной версии.

IP-адреса

Адресные объекты

Объекты IPv4Address и IPv6Address имеют много общих атрибутов. Некоторые атрибуты, имеющие значение только для адресов IPv6, также реализуются объектами IPv4Address, чтобы упростить написание кода, правильно обрабатывающего обе версии IP. Адресные объекты хэшируемы, поэтому их можно использовать в качестве ключей в словарях.

class ipaddress.IPv4Address(address)

Создать адрес IPv4. Вызывается AddressValueError, если address не является допустимым адресом IPv4.

Следующее представляет собой правильный адрес IPv4:

  1. Строка в десятично-точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделенных точками (например, 192.168.0.1). Каждое целое число представляет собой октет (байт) в адресе. Начальные нули допускаются только для значений меньше 8 (поскольку нет никакой неоднозначности между десятичной и восьмеричной интерпретацией таких строк).
  2. Целое число, умещающееся в 32 бита.
  3. Целое число, упакованное в объект bytes длины 4 (сначала старший октет).
>>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3232235521)
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
IPv4Address('192.168.0.1')
version

Соответствующий номер версии: 4 для IPv4, 6 для IPv6.

max_prefixlen

Общее количество битов в представлении адреса для этой версии: 32 для IPv4, 128 для IPv6.

Префикс определяет количество начальных битов в адресе, которые сравниваются, чтобы определить, является ли адрес частью сети.

compressed
exploded

Строковое представление в десятичном представлении с точками. Ведущие нули никогда не включаются в представление.

Поскольку IPv4 не определяет сокращенную запись для адресов с нулевыми октетами, данные два атрибута всегда совпадают с str(addr) для адресов IPv4. Предоставление доступа к этим атрибутам упрощает написание кода отображения, который может обрабатывать адреса как IPv4, так и IPv6.

packed

Двоичное представление этого адреса — объект bytes соответствующей длины (сначала самый значащий октет). Это 4 байта для IPv4 и 16 байтов для IPv6.

reverse_pointer

Имя обратной записи DNS PTR для IP-адреса, например

>>> ipaddress.ip_address("127.0.0.1").reverse_pointer
'1.0.0.127.in-addr.arpa'
>>> ipaddress.ip_address("2001:db8::1").reverse_pointer
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'

Это имя можно использовать для выполнения поиска PTR, а не само разрешенное имя хоста.

Добавлено в версии 3.5.

is_multicast

True, если адрес зарезервирован для многоадресной рассылки. См. RFC 3171 (для IPv4) или RFC 2373 (для IPv6).

is_private

True, если адрес выделен для частных сетей. См. iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6).

is_global

True, если адрес выделен для публичных сетей. См. iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6).

Добавлено в версии 3.4.

is_unspecified

True, если адрес не указан. См. RFC 5735 (для IPv4) или RFC 2373 (для IPv6).

is_reserved

True, если в противном случае адрес зарезервирован IETF.

is_loopback

True, если это петлевой адрес. См. RFC 3330 (для IPv4) или RFC 2373 (для IPv6).

True, если адрес зарезервирован для локального использования. См. RFC 3927.

class ipaddress.IPv6Address(address)

Создать адрес IPv6. Вызывается AddressValueError, если address не является допустимым IPv6 адресом.

Следующее представляет собой правильный IPv6 адрес:

  1. Строка, состоящая из восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит. Группы разделяются двоеточием. Определяет разбухшую нотацию (от руки). Строка также может быть сжата (сокращённая запись) различными способами. Подробности см. в RFC 4291. Например, "0000:0000:0000:0000:0000:0abc:0007:0def" можно сжать до "::abc:7:def".
  2. Целое число, умещающееся в 128 бит.
  3. Целое число, упакованное в объект bytes длины 16 с обратным
    порядком байтов.
>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
compressed

Краткая форма представления адреса с пропущенными ведущими нулями в группах и самой длинной последовательностью групп, полностью состоящей из нулей, свернута в одну пустую группу.

Это также значение, возвращаемое str(addr) для IPv6 адресов.

exploded

Длинная форма представления адреса, включающая все начальные нули и группы, полностью состоящие из нулей.

Для следующих атрибутов см. соответствующую документацию класса IPv4Address:

packed
reverse_pointer
version
max_prefixlen
is_multicast
is_private
is_global
is_unspecified
is_reserved
is_loopback

Добавлено в версии 3.4: is_global

is_site_local

True, если адрес зарезервирован для локального использования. Обратите внимание, что локальное адресное пространство сайта устарело в RFC 3879. Используйте is_private, чтобы проверить, находится ли данный адрес в пространстве уникальных локальных адресов, как определено RFC 4193.

ipv4_mapped

Для адресов, которые выглядят как сопоставленные адреса IPv4 (начиная с ::FFFF/96), это свойство будет сообщать встроенный адрес IPv4. Для любого другого адреса это свойство будет None.

sixtofour

Для адресов, которые выглядят как адреса 6to4 (начиная с 2002::/16), как определено RFC 3056, это свойство будет сообщать о встроенном IPv4-адресе. Для любого другого адреса это свойство будет None.

teredo

Для адресов, которые выглядят как адреса Teredo (начиная с 2001::/32), как определено RFC 4380, это свойство будет сообщать о встроенной паре IP-адресов (server, client). Для любого другого адреса это свойство будет None.

Преобразование в строки и целые числа

Для взаимодействия с сетевыми интерфейсами, через модуль socket, адреса должны быть преобразованы в строки или целые числа. Это обрабатывается с помощью встроенных функций str() и int():

>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1

Операторы

Адресные объекты поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).

Операторы сравнения

Адресные объекты можно сравнивать с помощью обычного набора операторов сравнения. Некоторые примеры:

>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
True
>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
False
>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
True

Арифметические операторы

Целые числа можно добавлять или вычитать из адресных объектов. Примеры

>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address

Определения IP-сети

Объекты IPv4Network и IPv6Network предоставляют механизм для определения и проверки определений IP-сетей. Определение сети состоит из маски и адреса сети, определяющее диапазон IP-адресов, равных сетевому адресу при маскировании (двоичное И) с маской. Например, определение сети с маской 255.255.255.0 и сетевым адресом 192.168.1.0 состоит из IP-адресов в диапазоне от 192.168.1.0 до 192.168.1.255 включительно.

Префикс, маска сети и маска хоста

Существует несколько эквивалентных способов указания сетевых IP масок. Префикс /<nbits> — это нотация, обозначающая, сколько старших битов установлено в сетевой маске. Сетевая маска — это IP-адрес с некоторым количеством установленных старших битов. Таким образом, префикс /24 эквивалентен сетевой маске 255.255.255.0 в IPv4 или ffff:ff00:: в IPv6. Кроме того, маска хоста является логической инверсией сетевой маски и иногда используется (например, в списках управления доступом Cisco) для обозначения сетевой маски. Маска хоста, эквивалентная /24 в IPv4, — 0.0.0.255.

Сетевые объекты

Все атрибуты, реализованные адресными объектами, реализуются и сетевыми объектами. Кроме того, сетевые объекты реализуют дополнительные атрибуты. Все они являются общими для IPv4Network и IPv6Network, поэтому во избежание дублирования они задокументированы только для IPv4Network. Сетевые объекты хэшируемы, поэтому их можно использовать в качестве ключей в словарях.

class ipaddress.IPv4Network(address, strict=True)

Создать определение сети IPv4. address может быть одним из следующих:

  1. Строка, состоящая из IP-адреса и необязательной маски, разделённых косой чертой (/). IP-адрес — это сетевой адрес, а маска может быть либо одним числом, что означает префикс, либо строковым представлением адреса IPv4. Если это последнее, маска интерпретируется как маска сети, если она начинается с ненулевого поля, или как маска хоста, если она начинается с нулевого поля, за единственным исключением маски со всеми нулями, которая обрабатывается как сетевая маска. Если маска не указана, считается, что это /32.

    Например, следующие address спецификации эквивалентны: 192.168.1.0/24, 192.168.1.0/255.255.255.0 и 192.168.1.0/0.0.0.255.

  2. Целое число, умещающееся в 32 бита. Это эквивалентно одноадресной сети с сетевым адресом address и маской /32.

  3. Целое число, упакованное в объект bytes длины 4 с прямым порядком байтов. Интерпретация аналогична целому числу address.

  4. Два кортежа из описания адреса и сетевой маски, где описание адреса представляет собой строку, 32-битное целое число, 4-байтовое упакованное целое число или существующий объект IPv4Address; а сетевая маска представляет собой либо целое число, представляющее длину префикса (например, 24), либо строку, представляющую маску префикса (например, 255.255.255.0).

Вызывается AddressValueError, если address не является допустимым адресом IPv4. NetmaskValueError возникает, если маска недействительна для адреса IPv4.

Если strict равен True и в предоставленном адресе установлены биты узла, то вызывается ValueError. В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.

Если не указано иное, все сетевые методы, принимающие другие объекты сети/адреса, вызовут TypeError, если IP-версия аргумента несовместима с self.

Изменено в версии 3.5: Добавлена форма из двух кортежей для параметра конструктора address.

version
max_prefixlen

См. соответствующую документацию по атрибуту в IPv4Address.

is_multicast
is_private
is_unspecified
is_reserved
is_loopback

Данные атрибуты верны для сети в целом, если они верны как для сетевого адреса, так и для широковещательного адреса.

network_address

Сетевой адрес для сети. Сетевой адрес и длина префикса вместе однозначно определяют сеть.

broadcast_address

Широковещательный адрес для сети. Пакеты, отправленные на широковещательный адрес, должны быть получены каждым хостом в сети.

hostmask

Маска хоста в виде объекта IPv4Address.

netmask

Маска сети как объект IPv4Address.

with_prefixlen
compressed
exploded

Строковое представление сети с маской в виде префикса.

with_prefixlen и compressed всегда совпадают с str(network). exploded использует расширенную форму сетевого адреса.

with_netmask

Строковое представление сети с маской в нотации сетевой маски.

with_hostmask

Строковое представление сети с маской в виде маски хоста.

num_addresses

Общее количество адресов в сети.

prefixlen

Длина сетевого префикса в битах.

hosts()

Возвращает итератор доступных для использования хостов в сети. Используемые хосты — это все IP-адреса, принадлежащие сети, за исключением самого сетевого адреса и сетевого широковещательного адреса. Для сетей с длиной маски 31 в результат также включаются сетевой адрес и сетевой широковещательный адрес.

>>> list(ip_network('192.0.2.0/29').hosts())  #doctest: +NORMALIZE_WHITESPACE
[IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),
 IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),
 IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
>>> list(ip_network('192.0.2.0/31').hosts())
[IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
overlaps(other)

True, если сеть частично или полностью содержится в other, или other полностью содержится в данной сети.

address_exclude(network)

Вычисляет определения сети, полученные в результате удаления заданного network из этого. Возвращает итератор сетевых объектов. Вызывает ValueError, если network не полностью содержится в данной сети.

>>> n1 = ip_network('192.0.2.0/28')
>>> n2 = ip_network('192.0.2.1/32')
>>> list(n1.address_exclude(n2))  #doctest: +NORMALIZE_WHITESPACE
[IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
 IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
subnets(prefixlen_diff=1, new_prefix=None)

Подсети, которые объединяются для создания текущего определения сети, в зависимости от значений аргументов. prefixlen_diff — это величина, на которую должна быть увеличена длина нашего префикса. new_prefix — желаемый новый префикс подсетей; он должен быть больше нашего префикса. Должен быть установлен один и только один из prefixlen_diff и new_prefix. Возвращает итератор сетевых объектов.

>>> list(ip_network('192.0.2.0/24').subnets())
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
>>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))  #doctest: +NORMALIZE_WHITESPACE
[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))  #doctest: +NORMALIZE_WHITESPACE
[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    raise ValueError('new prefix must be longer')
ValueError: new prefix must be longer
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
supernet(prefixlen_diff=1, new_prefix=None)

Суперсеть, содержащая это определение сети, в зависимости от значений аргументов. prefixlen_diff — это величина, на которую должна быть уменьшена длина нашего префикса. new_prefix — желаемый новый префикс суперсети; он должен быть меньше нашего префикса. Должен быть установлен один и только один из prefixlen_diff и new_prefix. Возвращает один сетевой объект.

>>> ip_network('192.0.2.0/24').supernet()
IPv4Network('192.0.2.0/23')
>>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)
IPv4Network('192.0.0.0/22')
>>> ip_network('192.0.2.0/24').supernet(new_prefix=20)
IPv4Network('192.0.0.0/20')
subnet_of(other)

Возвращает True, если сеть является подсетью other.

>>> a = ip_network('192.168.1.0/24')
>>> b = ip_network('192.168.1.128/30')
>>> b.subnet_of(a)
True

Добавлено в версии 3.7.

supernet_of(other)

Возвращает True, если сеть является суперсетью other.

>>> a = ip_network('192.168.1.0/24')
>>> b = ip_network('192.168.1.128/30')
>>> a.supernet_of(b)
True

Добавлено в версии 3.7.

compare_networks(other)

Сравнить эту сеть с other. В этом сравнении учитываются только сетевые адреса; биты хоста — нет. Возвращает -1, 0 или 1.

>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))
-1
>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))
1
>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))
0

Не рекомендуется, начиная с версии 3.7: Он использует тот же алгоритм упорядочивания и сравнения, что и «<», «==» и «>»

class ipaddress.IPv6Network(address, strict=True)

Создать определение сети IPv6. address может быть одним из следующих:

  1. Строка, состоящая из IP-адреса и необязательной длины префикса, разделенных косой чертой (/). IP-адрес — это сетевой адрес, а длина префикса должна быть одним числом префикса. Если длина префикса не указана, считается, что она равна /128.

    Обратите внимание, что в настоящее время расширенные маски сети не поддерживаются. Это означает, что 2001:db00::0/24 является допустимым аргументом, а 2001:db00::0/ffff:ff00:: — нет.

  2. Целое число, умещающееся в 128 бит. Это эквивалентно одноадресной сети с сетевым адресом address и маской /128.

  3. Целое число, упакованное в объект bytes длины 16 с обратным порядком байтов. Интерпретация аналогична целому числу address.

  4. Два кортежа из описания адреса и маски подсети, где описание адреса представляет собой строку, 128-битное целое число, 16-битное упакованное целое число или существующий объект IPv6Address; а сетевая маска представляет собой целое число, представляющее длину префикса.

Вызывается AddressValueError, если address не является допустимым адресом IPv6. Вызывается NetmaskValueError, если маска недействительна для IPv6-адреса.

Если strict равен True и в предоставленном адресе установлены биты узла, то вызывается ValueError. В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.

Изменено в версии 3.5: Добавлена форма из двух кортежей для параметра address конструктора.

version
max_prefixlen
is_multicast
is_private
is_unspecified
is_reserved
is_loopback
network_address
broadcast_address
hostmask
netmask
with_prefixlen
compressed
exploded
with_netmask
with_hostmask
num_addresses
prefixlen
hosts()

Возвращает итератор доступных для использования хостов в сети. Используемые хосты — это все IP-адреса, принадлежащие сети, за исключением произвольного адреса подсети-маршрутизатора. Для сетей с длиной маски 127 адрес произвольной рассылки подсети-маршрутизатора также включается в результат.

overlaps(other)
address_exclude(network)
subnets(prefixlen_diff=1, new_prefix=None)
supernet(prefixlen_diff=1, new_prefix=None)
subnet_of(other)
supernet_of(other)
compare_networks(other)

См. соответствующую документацию по атрибуту в IPv4Network.

is_site_local

Данные атрибуты верны для сети в целом, если они верны как для сетевого адреса, так и для широковещательного адреса.

Операторы

Сетевые объекты поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).

Логические операторы

Сетевые объекты можно сравнить с обычным набором логических операторов. Сетевые объекты упорядочиваются сначала по сетевому адресу, а затем по сетевой маске.

Итерация

Сетевые объекты можно повторять, чтобы получить список всех адресов, принадлежащих сети. Для итерации возвращаются все узлы, включая неиспользуемые узлы (для используемых узлов используйте метод hosts()). Пример:

>>> for addr in IPv4Network('192.0.2.0/28'):
...     addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')

Сети как контейнеры адресов

Сетевые объекты могут выступать в качестве контейнеров адресов. Некоторые примеры:

>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False

Объекты Interface

Объекты Interface хэшируемы, поэтому их можно использовать в качестве ключей в словарях.

class ipaddress.IPv4Interface(address)

Создать интерфейс IPv4. Значение address такое же, как и в конструкторе IPv4Network, за исключением того, что всегда принимаются произвольные адреса узлов.

IPv4Interface является подклассом IPv4Address, поэтому он наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:

ip

Адрес (IPv4Address) без информации о сети.

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.ip
IPv4Address('192.0.2.5')
network

Сеть (IPv4Network), к которой принадлежит данный интерфейс.

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.network
IPv4Network('192.0.2.0/24')
with_prefixlen

Строковое представление интерфейса с маской в префиксной нотации.

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.with_prefixlen
'192.0.2.5/24'
with_netmask

Строковое представление интерфейса с сетью в виде сетевой маски.

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.with_netmask
'192.0.2.5/255.255.255.0'
with_hostmask

Строковое представление интерфейса с сетью в качестве маски хоста.

>>> interface = IPv4Interface('192.0.2.5/24')
>>> interface.with_hostmask
'192.0.2.5/0.0.0.255'
class ipaddress.IPv6Interface(address)

Создать интерфейс IPv6. Значение address такое же, как и в конструкторе IPv6Network, за исключением того, что всегда принимаются произвольные адреса узлов.

IPv6Interface является подклассом IPv6Address, поэтому он наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:

ip
network
with_prefixlen
with_netmask
with_hostmask

См. соответствующую документацию по атрибуту в IPv4Interface.

Операторы

Объекты Interface поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).

Логические операторы

Объекты Interface можно сравнить с обычным набором логических операторов.

Для сравнения на равенство (== и !=) и IP-адрес, и сеть должны быть одинаковыми, чтобы объекты были равными. Интерфейс не будет сравниваться с любым адресом или сетевым объектом.

Для заказа (<, > и т. д.) правила другие. Объекты интерфейса и адреса с одной и той же версией IP можно сравнивать, и объекты адреса всегда будут сортироваться перед объектами интерфейса. Два интерфейсных объекта сначала сравниваются по их сетям и, если они совпадают, то по их IP-адресам.

Другие функции уровня модуля

Модуль также предоставляет следующие функции уровня модуля:

ipaddress.v4_int_to_packed(address)

Представлять адрес как 4 упакованных байта в сетевом порядке (с обратным порядком байтов). address — это целочисленное представление IP-адреса IPv4. Вызывается ValueError, если целое число отрицательное или слишком большое, чтобы быть IP-адресом IPv4.

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.v4_int_to_packed(3221225985)
b'\xc0\x00\x02\x01'
ipaddress.v6_int_to_packed(address)

Представлять адрес как 16 упакованных байтов в сетевом порядке (с обратным порядком байтов). address — это целочисленное представление IP-адреса IPv6. Вызывается ValueError, если целое число отрицательное или слишком большое, чтобы быть IP-адресом IPv6.

ipaddress.summarize_address_range(first, last)

Возвращает итератор суммарного сетевого диапазона с учётом первого и последнего IP-адресов. first — это первый IPv4Address или IPv6Address в диапазоне, а last — последний IPv4Address или IPv6Address в диапазоне. Вызывается TypeError, если first или last не являются IP-адресами или имеют разные версии. Вызывается ValueError, если last не больше first или если версия адреса first не 4 или 6.

>>> [ipaddr for ipaddr in ipaddress.summarize_address_range(
...    ipaddress.IPv4Address('192.0.2.0'),
...    ipaddress.IPv4Address('192.0.2.130'))]
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
ipaddress.collapse_addresses(addresses)

Возвращает итератор свернутых объектов IPv4Network или IPv6Network. addresses — это итератор объектов IPv4Network или IPv6Network. Вызывается TypeError, если addresses содержит объекты смешанной версии.

>>> [ipaddr for ipaddr in
... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),
... ipaddress.IPv4Network('192.0.2.128/25')])]
[IPv4Network('192.0.2.0/24')]
ipaddress.get_mixed_type_key(obj)

Возвращает ключ, подходящий для сортировки между сетями и адресами. Адресные и сетевые объекты по умолчанию не подлежат сортировке; они принципиально разные, поэтому выражение:

IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')

не имеет смысла. Однако в некоторых случаях вам может понадобиться сортировка ipaddress в любом случае. Если вам нужно это сделать, вы можете использовать эту функцию в качестве аргумента key для sorted().

obj — это объект сети или адреса.

Пользовательские исключения

Для поддержки более подробных отчётов об ошибках из конструкторов классов модуль определяет следующие исключения:

exception ipaddress.AddressValueError(ValueError)

Любая ошибка значения, связанная с адресом.

exception ipaddress.NetmaskValueError(ValueError)

Любая ошибка значения, связанная с сетевой маской.