Spec-Zone.ru › Python 3.7

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

IP-адреса

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

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

class ipaddress.IPv4Address(address)

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

Следующее представляет собой валидный 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. Если address не является допустимым адресом 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, сопоставленными с IPv6 (начинающимися с ::FFFF/96), это свойство сообщит встроенный адрес IPv4. Для любого другого адреса это свойство будет None.

sixtofour

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

teredo

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

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

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

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

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)

Вычисляет определения сетей, полученные путем удаления заданной 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')
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:: — нет.

  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)
subnet_of(other)
supernet_of(other)
compare_networks(other)

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

is_site_local

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

Операторы

Объекты сети поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только к совместимым объектам (то есть 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-адресам.

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

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

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

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

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

exception ipaddress.AddressValueError(ValueError)

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

exception ipaddress.NetmaskValueError(ValueError)

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

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

Spec-Zone.ru

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