Spec-Zone.ru › Python 3.6

ipaddress — Библиотека для работы с IPv4/IPv6 адресами

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

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

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

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

Новая в версии 3.3.

21.28.1. Функции-фабрики для удобства

Модуль 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 был задуман.

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

21.28.2. IP-адреса

21.28.2.1. Объекты адресов

Объекты 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).

is_link_local

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

END_OF_DOCUMENT_MARKER
class ipaddress.IPv6Address(address)

Создайте адрес IPv6. Если адрес не является допустимым адресом IPv6, будет поднято исключение AddressValueError.

Следующее является допустимым адресом IPv6:

  1. Строка, состоящая из восьми групп из четырёх шестнадцатеричных цифр, каждая группа представляет 16 бит. Группы разделены двоеточиями. Это описывает развёрнутую (полную) запись. Строка также может быть сжатой (короткой) записью разными способами. Смотрите RFC 4291 для получения подробной информации. Например, "0000:0000:0000:0000:0000:0abc:0007:0def" можно сжать до "::abc:7:def".
  2. Целое число, которое помещается в 128 бит.
  3. Целое число, упакованное в объект bytes длиной 16 байт, в формате big-endian.
>>> 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
is_link_local

Новое в версии 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, это свойство сообщит встроенную пару адресов (server, client) IP. Для любого другого адреса это свойство будет None.

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

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

21.28.2.3. Операторы

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

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

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

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

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

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

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

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

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

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

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

21.28.3.2. Объекты сети

Все атрибуты, реализованные объектами адресов, реализованы и объектами сетей. Кроме того, объекты сетей реализуют дополнительные атрибуты. Все они общие для 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 байта, в формате big-endian. Интерпретация аналогична целому числу address.
  4. Двухэлементная кортеж из описания адреса и маски сети, где описание адреса может быть строкой, 32-битным целым числом, 4-байтовым упакованным целым числом или существующим объектом IPv4Address; а маска сети — либо целое число, представляющее длину префикса (например, 24) или строка, представляющая маску префикса (например, 255.255.255.0).

Если address не является допустимым IPv4-адресом, генерируется исключение AddressValueError. Если маска не является допустимой для IPv4-адреса, генерируется исключение NetmaskValueError.

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

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

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

version
max_prefixlen

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

is_multicast
is_private
is_unspecified
is_reserved
is_loopback
is_link_local

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

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

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

>>> 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')
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
class ipaddress.IPv6Network(address, strict=True)

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

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

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

  2. Целое число, помещающееся в 128 бит. Это эквивалентно сети с одним адресом, где адрес сети — address, а маска — /128.
  3. Целое число, упакованное в объект bytes длиной 16 байт, в формате big-endian. Интерпретация аналогична целому числу address.
  4. Двухэлементная кортеж из описания адреса и маски подсети, где описание адреса может быть строкой, 128-битным целым числом, 16-байтовым упакованным целым числом или существующим объектом IPv6Address; а маска подсети — целое число, представляющее длину префикса.

Если address не является допустимым IPv6-адресом, генерируется исключение AddressValueError. Если маска не является допустимой для IPv6-адреса, генерируется исключение NetmaskValueError.

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

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

version
max_prefixlen
is_multicast
is_private
is_unspecified
is_reserved
is_loopback
is_link_local
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)
compare_networks(other)

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

is_site_local

Этот атрибут равен True для всей сети, если он равен True для адреса сети и адреса широковещательной рассылки.

21.28.3.3. Операторы

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

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

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

21.28.3.3.2. Итерация

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

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

Объекты сетей могут действовать как контейнеры адресов. Примеры:

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

21.28.4. Объекты интерфейса

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

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.

21.28.4.1. Операторы

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

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

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

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

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

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

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

ipaddress.v4_int_to_packed(address)

Представление адреса в виде 4 упакованных байтов в сетевом (big-endian) порядке. address — целое число, представляющее IPv4-адрес. Если целое число отрицательное или слишком большое для IPv4-адреса, генерируется исключение ValueError.

>>> 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-адрес. Если целое число отрицательное или слишком большое для IPv6-адреса, генерируется исключение ValueError.

ipaddress.summarize_address_range(first, last)

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

>>> [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. Если addresses содержит объекты разных версий, генерируется исключение TypeError.

>>> [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 — объект сети или адреса.

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

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

exception ipaddress.AddressValueError(ValueError)

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

exception ipaddress.NetmaskValueError(ValueError)

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

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/ipaddress.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API