Документация Python неофициальный перевод
Содержание страницы

ipaddress – библиотека для работы с IPv4/IPv6ipaddress – IPv4/IPv6 manipulation library

Исходный код: Lib/ipaddress.py


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

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

Это полная справочная информация по модулю API. Обзор и введение см. в Введение в модуль ipaddress.

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

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

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

ipaddress.ip_address(address)

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

>>> 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. Если address не является корректным IPv4- или IPv6-адресом, или в сети установлены биты хоста, возбуждается ValueError.

>>> 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. Если address не является корректным IPv4- или IPv6-адресом, возбуждается ValueError.

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

IP-адресаIP Addresses

Объекты адресовAddress objects

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

class ipaddress.IPv4Address(address)

Создаёт IPv4-адрес. Если address не является корректным IPv4-адресом, возбуждается AddressValueError.

Корректным IPv4-адресом считается следующее:

  1. Строка в десятично-точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделённых точками (например, 192.168.0.1). Каждое целое число представляет октет (байт) адреса. Начальные нули не допускаются, чтобы избежать путаницы с восьмеричной записью.

  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')

Изменено в версии 3.8: Начальные нули теперь допускаются, даже в неоднозначных случаях, похожих на восьмеричную запись.

Изменено в версии 3.9.5: Начальные нули больше не допускаются и считаются ошибкой. Строки IPv4-адресов теперь разбираются так же строго, как в glibc inet_pton().

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

Имя обратной PTR-записи DNS для 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_private равно False для общего адресного пространства (100.64.0.0/10)

  • Для IPv4-отображённых IPv6-адресов значение is_private определяется семантикой базовых IPv4-адресов, и выполняется следующее условие (см. IPv6Address.ipv4_mapped):

    address.is_private == address.ipv4_mapped.is_private
    

is_private имеет значение, противоположное is_global, за исключением общего адресного пространства (диапазон 100.64.0.0/10), где оба равны False.

Изменено в версии 3.12.4: Исправлены некоторые ложные срабатывания и пропуски.

  • 192.0.0.0/24 считается частным, за исключением 192.0.0.9/32 и 192.0.0.10/32 (ранее: только поддиапазон 192.0.0.0/29 считался частным).

  • 64:ff9b:1::/48 считается частным.

  • 2002::/16 считается частным.

  • Внутри 2001::/23 (в остальном считающегося частным) есть исключения: 2001:1::1/128, 2001:1::2/128, 2001:3::/32, 2001:4:112::/48, 2001:20::/28, 2001:30::/28. Исключения не считаются частными.

is_global

True, если адрес определён как глобально достижимый согласно iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6), за следующим исключением:

Для IPv4-отображённых IPv6-адресов значение is_private определяется семантикой базовых IPv4-адресов, и выполняется следующее условие (см. IPv6Address.ipv4_mapped):

address.is_global == address.ipv4_mapped.is_global

is_global имеет значение, противоположное is_private, за исключением общего адресного пространства (диапазон 100.64.0.0/10), где оба равны False.

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

Изменено в версии 3.12.4: Исправлены некоторые ложные срабатывания и пропуски, подробнее см. is_private.

is_unspecified

True, если адрес не определён. См. RFC 5735 (для IPv4) или RFC 2373 (для IPv6).

is_reserved

True если адрес зарезервирован IETF.

is_loopback

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

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

IPv4Address.__format__(fmt)

Возвращает строковое представление IP-адреса, управляемое явной строкой формата. fmt может быть одним из следующих: 's', вариант по умолчанию, эквивалентный str(); 'b' для двоичной строки с нулевым заполнением; 'X' или 'x' для шестнадцатеричного представления в верхнем или нижнем регистре; или 'n', который эквивалентен 'b' для IPv4-адресов и 'x' для IPv6. Для двоичного и шестнадцатеричного представления доступны спецификатор формы '#' и опция группировки '_'. __format__ используется format, str.format и f-строками.

>>> format(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
'0b11000000101010000000000000000001'
>>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
'2001:db8::1000'
>>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
'2001_0DB8_0000_0000_0000_0000_0000_1000'
>>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
'0x2001_0db8_0000_0000_0000_0000_0000_1000'

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

class ipaddress.IPv6Address(address)

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

Допустимый IPv6-адрес образуется следующим образом:

  1. Строка из восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит. Группы разделяются двоеточиями. Это описывает развёрнутую (полную) запись. Строка также может быть сжата (краткая запись) различными способами. Подробнее см. RFC 4291. Например, "0000:0000:0000:0000:0000:0abc:0007:0def" можно сжать до "::abc:7:def".

    Строка может также дополнительно содержать идентификатор зоны области действия (scope zone ID), выраженный суффиксом %scope_id. При наличии такой идентификатор зоны должен быть непустым и не может содержать %. Подробнее см. RFC 4007. Например, fe80::1234%1 может идентифицировать адрес fe80::1234 на первом канале (link) узла.

  2. Целое число, помещающееся в 128 бит.

  3. Целое число, упакованное в объект bytes длиной 16, big-endian.

>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address('ff02::5678%1')
IPv6Address('ff02::5678%1')
compressed

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

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

exploded

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

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

packed
reverse_pointer
version
max_prefixlen
is_multicast
is_private
is_global

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

is_unspecified
is_reserved
is_loopback
is_site_local

True если адрес зарезервирован для использования в локальной сети (site-local). Обратите внимание, что пространство адресов site-local признано устаревшим согласно RFC 3879. Используйте is_private для проверки, принадлежит ли этот адрес пространству уникальных локальных адресов, определённому в RFC 4193.

ipv4_mapped

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

scope_id

Для адресов с областью действия (scoped addresses), определённых в RFC 4007, это свойство определяет конкретную зону области действия адреса, к которой принадлежит адрес, в виде строки. Если зона области действия не указана, это свойство будет None.

sixtofour

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

teredo

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

IPv6Address.__format__(fmt)

Обратитесь к соответствующей документации метода в IPv4Address.

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

Преобразование в строки и целые числаConversion to Strings and Integers

Для взаимодействия с сетевыми интерфейсами, такими как модуль 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

Обратите внимание, что IPv6-адреса с областью действия (scoped addresses) преобразуются в целые числа без идентификатора зоны области действия.

ОператорыOperators

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

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

Объекты адресов можно сравнивать с помощью обычного набора операторов сравнения. Одинаковые 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
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True

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

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

>>> 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-сетейIP Network definitions

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

Префикс, маска сети и маска хостаPrefix, net mask and host mask

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

Объекты сетейNetwork objects

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

class ipaddress.IPv4Network(address, strict=True)

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

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

    Например, следующие спецификации адрес эквивалентны: 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 байта, с порядком от старшего к младшему. Интерпретация аналогична целочисленному адресу.

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

Исключение AddressValueError возбуждается, если адрес не является допустимым 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 сетевой адрес и широковещательный адрес также включаются в результат. Сети с маской 32 вернут список, содержащий единственный адрес хоста.

>>> list(ip_network('192.0.2.0/29').hosts())
[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')]
>>> list(ip_network('192.0.2.1/32').hosts())
[IPv4Address('192.0.2.1')]
overlaps(other)

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

address_exclude(network)

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

>>> n1 = ip_network('192.0.2.0/28')
>>> n2 = ip_network('192.0.2.1/32')
>>> list(n1.address_exclude(n2))
[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))
[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))
[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, если данная сеть является подсетью другого.

>>> 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, если данная сеть является суперсетью другого.

>>> 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)

Сравнивает данную сеть с другим. При таком сравнении учитываются только сетевые адреса; биты хоста не учитываются. Возвращает -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-сети. адрес может быть одним из следующих:

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

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

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

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

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

AddressValueError вызывается, если адрес не является допустимым 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-адреса, принадлежащие сети, за исключением anycast-адреса подсети-маршрутизатора. Для сетей с длиной маски 127 anycast-адрес подсети-маршрутизатора также включается в результат. Сети с маской 128 вернут список, содержащий единственный адрес хоста.

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

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

ОператорыOperators

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

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

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

ПереборIteration

Сетевые объекты можно перебирать для получения списка всех адресов, принадлежащих сети. При переборе возвращаются все хосты, включая непригодные для использования (для пригодных хостов используйте метод 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')

Сети как контейнеры адресовNetworks as containers of addresses

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

>>> 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 objects

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

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.

ОператорыOperators

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

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

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

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

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

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

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

ipaddress.v4_int_to_packed(address)

Представляет адрес в виде 4 упакованных байт в сетевом порядке (big-endian). address – это целочисленное представление IPv4-адреса. Исключение ValueError возбуждается, если целое отрицательно или слишком велико для 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 упакованных байт в сетевом порядке (big-endian). address – это целочисленное представление IPv6-адреса. Исключение ValueError возбуждается, если целое отрицательно или слишком велико для 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)

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

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

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

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

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

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

exception ipaddress.AddressValueError(ValueError)

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

exception ipaddress.NetmaskValueError(ValueError)

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