Содержание страницы
21.28. ipaddress – библиотека для работы с IPv4/IPv6¶ipaddress – IPv4/IPv6 manipulation library
Исходный код: Lib/ipaddress.py
ipaddress предоставляет возможности для создания, изменения и работы с IPv4- и IPv6-адресами и сетями.
Функции и классы этого модуля упрощают выполнение различных задач, связанных с IP-адресами: проверку, находятся ли два хоста в одной подсети; перебор всех хостов в заданной подсети; проверку, является ли строка корректным IP-адресом или определением сети, и так далее.
Это полная справочная информация по модулю API. Обзор и введение см. в Введение в модуль ipaddress.
Новое в версии 3.3.
21.28.1. Вспомогательные фабричные функции¶Convenience factory functions
Модуль 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 – приводит к тому, что сообщения об ошибках содержат минимум информации о точной ошибке, поскольку функции не знают, какой формат предполагался. Более подробные сообщения об ошибках можно получить, напрямую вызывая соответствующие версии конструкторов классов.
21.28.2. IP-адреса¶IP Addresses
21.28.2.1. Объекты адресов¶Address objects
Объекты IPv4Address и IPv6Address имеют много общих атрибутов. Некоторые атрибуты, имеющие смысл только для IPv6-адресов, также реализованы в объектах IPv4Address, чтобы упростить написание кода, корректно работающего с обеими версиями IP. Объекты адресов являются хешируемыми, поэтому их можно использовать в качестве ключей словаря.
-
class
ipaddress.IPv4Address(address)¶ Создаёт IPv4-адрес. Если address не является корректным IPv4-адресом, возбуждается
AddressValueError.Корректным IPv4-адресом считается следующее:
Строка в десятично-точечной записи, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделённых точками (например,
192.168.0.1). Каждое число представляет октет (байт) адреса. Начальные нули допускаются только для значений меньше 8 (поскольку в таких строках нет неоднозначности между десятичной и восьмеричной интерпретацией).Целое число, помещающееся в 32 бита.
Целое число, упакованное в объект
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, если адрес выделен для публичных сетей. См. iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6).Новое в версии 3.4.
-
is_reserved¶ Trueесли адрес зарезервирован IETF.
-
class
ipaddress.IPv6Address(address)¶ Создаёт IPv6-адрес.
AddressValueErrorвозникает, если address не является допустимым IPv6-адресом.Допустимый IPv6-адрес образуется следующим образом:
Строка из восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит. Группы разделяются двоеточиями. Это описывает развёрнутую (полную) запись. Строка также может быть сжата (краткая запись) различными способами. Подробнее см. RFC 4291. Например,
"0000:0000:0000:0000:0000:0abc:0007:0def"можно сжать до"::abc:7:def".Целое число, помещающееся в 128 бит.
Целое число, упакованное в объект
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если адрес зарезервирован для использования в локальной сети (site-local). Обратите внимание, что пространство адресов site-local признано устаревшим согласно RFC 3879. Используйтеis_privateдля проверки, принадлежит ли этот адрес пространству уникальных локальных адресов, определённому в RFC 4193.
-
ipv4_mapped¶ Для адресов, которые выглядят как IPv4-mapped адреса (начинающихся с
::FFFF/96), это свойство возвращает встроенный IPv4-адрес. Для всех остальных адресов это свойство будетNone.
21.28.2.2. Преобразование в строки и целые числа¶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
21.28.2.3. Операторы¶Operators
Объекты адресов поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (т.е. IPv4 с IPv4, IPv6 с IPv6).
21.28.2.3.1. Операторы сравнения¶Comparison operators
Объекты адресов можно сравнивать с помощью обычных операторов сравнения. Несколько примеров:
>>> 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. Арифметические операторы¶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
21.28.3. Определения 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 включительно.
21.28.3.1. Префикс, маска сети и маска хоста¶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.
21.28.3.2. Объекты сетей¶Network objects
Все атрибуты, реализованные объектами адресов, также реализованы объектами
сетей. Кроме того, объекты сетей реализуют дополнительные атрибуты.
Все они являются общими для IPv4Network и IPv6Network,
поэтому во избежание дублирования они задокументированы только для IPv4Network.
Объекты сетей являются хешируемыми, поэтому их можно использовать в качестве ключей в
словарях.
-
class
ipaddress.IPv4Network(address, strict=True)¶ Создаёт определение IPv4-сети. адрес может быть одним из следующих:
Строка, состоящая из 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.Целое число, помещающееся в 32 бита. Оно эквивалентно сети с одним адресом, где адресом сети является address, а маской –
/32.Целое число, упакованное в объект
bytesдлиной 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¶
-
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, если данная сеть частично или полностью содержится в другом или другой полностью содержится в данной сети.
-
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')
-
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
-
class
ipaddress.IPv6Network(address, strict=True)¶ Создаёт определение IPv6-сети. адрес может быть одним из следующих:
Строка, состоящая из IP-адреса и необязательной длины префикса, разделённых косой чертой (
/). IP-адрес является сетевым адресом, а длина префикса должна быть одним числом – префикс. Если длина префикса не указана, считается равной/128.Обратите внимание, что развёрнутые маски сети в настоящее время не поддерживаются. Это означает, что
2001:db00::0/24является допустимым аргументом, а2001:db00::0/ffff:ff00::– нет.Целое число, помещающееся в 128 бит. Это эквивалентно сети с одним адресом, где сетевым адресом является адрес, а маской –
/128.Целое число, упакованное в объект
bytesдлиной 16 байт, порядок байтов от старшего к младшему. Интерпретация аналогична целому числу адрес.Двухэлементный кортеж из описания адреса и маски подсети, где описание адреса может быть строкой, 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¶
-
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¶ Этот атрибут истинен для сети в целом, если он истинен как для адреса сети, так и для широковещательного адреса.
21.28.3.3. Операторы¶Operators
Сетевые объекты поддерживают некоторые операторы. Если не указано иное, операторы можно применять только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).
21.28.3.3.1. Логические операторы¶Logical operators
Сетевые объекты можно сравнивать с помощью обычного набора логических операторов. Сетевые объекты упорядочиваются сначала по сетевому адресу, затем по маске сети.
21.28.3.3.2. Итерация¶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')
21.28.3.3.3. Сети как контейнеры адресов¶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
21.28.4. Объекты интерфейсов¶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.
-
21.28.4.1. Операторы¶Operators
Объекты интерфейса поддерживают некоторые операторы. Если не указано иное, операторы можно применять только между совместимыми объектами (т.е. IPv4 с IPv4, IPv6 с IPv6).
21.28.4.1.1. Логические операторы¶Logical operators
Объекты интерфейса можно сравнивать с помощью обычного набора логических операторов.
Для сравнения на равенство (== и !=) и IP-адрес, и сеть должны совпадать, чтобы объекты были равны. Интерфейс не будет равен ни одному адресу или сетевому объекту.
Для упорядочивания (<, > и т.д.) действуют другие правила. Интерфейсные объекты и объекты адресов одной версии IP можно сравнивать, при этом объекты адресов всегда будут сортироваться перед интерфейсными объектами. Два интерфейсных объекта сначала сравниваются по своим сетям, а если они одинаковы, то по своим IP-адресам.
21.28.5. Другие функции уровня модуля¶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 – это объект сети или адреса.
21.28.6. Пользовательские исключения¶Custom Exceptions
Для поддержки более конкретных сообщений об ошибках от конструкторов классов модуль определяет следующие исключения:
-
exception
ipaddress.AddressValueError(ValueError)¶ Любая ошибка значения, связанная с адресом.
-
exception
ipaddress.NetmaskValueError(ValueError)¶ Любая ошибка значения, связанная с маской сети.