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

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


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

IP-адреса

Объекты адреса

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

class ipaddress.IPv4Address(address)

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

Ниже указан допустимый адрес IPv4:

  1. A строка в десятично-точечном представлении, состоящем из четырёх десятичных целых чисел в инклюзивном диапазоне 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

Имя обратной записи 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_global

True если адрес назначен для public сетей. См. 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 если адрес зарезервирован для использования link-локальная. См. RFC 3927.

class ipaddress.IPv6Address(address)

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

Ниже указан допустимый адрес IPv6:

  1. Строка, состоящий из восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит. Группы разделены двоеточием. Здесь описывается нотация exploded (обыкновенное письмо). Строка также может быть compressed (сокращенная нотация) различными средствами. Дополнительные сведения см. в разделе 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 class:

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 если адрес зарезервирован для использования site-локальная. Обратите внимание, что адресное пространство сайта-локальная было запрещено RFC 3879. Используйте is_private, чтобы проверить, ли этот адрес в течение уникальных адресов локальная, как определено RFC 4193.

ipv4_mapped

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

sixtofour

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

teredo

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

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

Для взаимодействия с сетевыми интерфейсами, такими как модуль soket, адреса должны быть преобразованы в строки или целые числа. Это выполняется с помощью функций построения 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. Если это последнее, маска интерпретируется как net mask, если она начинается с ненулевого поля, или как маска хоста, если она начинается с нулевого поля, за единственным исключением полностью нулевой маски, которая рассматривается как сетевая маска. Если маска не предоставляется, она считается /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-адрес - это сетевой адрес, а длина префикса должна быть одним номером, то есть prefix. Если длина префикса не указана, он считается /128.

Обратите внимание, что в настоящее время расширенные маски сетей не поддерживаются. Это означает, что 2001:db00::0/24 - действительный аргумент в то время как 2001:db00::0/ffff:ff00:: нет.
  1. Целое число, которое соответствует 128 битам. Это эквивалентно одноадресной сети с сетевым адресом address и маской /128.
  2. Целое число, упакованное в объект bytes длиной 16, big-endian. Интерпретация похожа на целое число address.
  3. Двухкортежное описание адреса и маску сети, где описание адреса является либо строка, 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-адреса, принадлежащие сети, за исключением адреса anycast подсети-маршрутизатора. Для сетей с длиной маски 127 адрес anycast подсети-маршрутизатора также включается в результат.

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

Интерфейсные объекты

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

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.

Операторы

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

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

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

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

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

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

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

ipaddress.v4_int_to_packed(address)

Представление адреса в виде 4 упакованных байтов в сетевом (big-endian) порядке. address представляет собой целое число IPv4 IP-адреса. 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 упакованных байтах в сетевом (big-endian) порядке. address представляет собой целое число IPv6 IP-адреса. 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)

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

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

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

obj является либо сетевым, либо адресным объектом.

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

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

exception ipaddress.AddressValueError(ValueError)

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

exception ipaddress.NetmaskValueError(ValueError)

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