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 адрес:
- Строка в десятично-точечном формате, состоящая из четырех десятичных целых чисел в диапазоне от 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 -
Имя записи обратного 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_reserved -
Trueесли адрес зарезервирован IETF.
-
is_link_local -
Trueесли адрес зарезервирован для использования в локальной сети. См. RFC 3927.
- Строка в десятично-точечном формате, состоящая из четырех десятичных целых чисел в диапазоне от 0 до 255, разделенных точками (например,
-
class ipaddress.IPv6Address(address) -
Создайте адрес IPv6. Если адрес не является допустимым адресом IPv6, будет поднято исключение
AddressValueError.Следующее является допустимым адресом 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если адрес зарезервирован для использования в локальной сети сайта. Обратите внимание, что адресное пространство для локальной сети сайта было устаревшим 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.
- Строка, состоящая из восьми групп из четырёх шестнадцатеричных цифр, каждая группа представляет 16 бит. Группы разделены двоеточиями. Это описывает развёрнутую (полную) запись. Строка также может быть сжатой (короткой) записью разными способами. Смотрите RFC 4291 для получения подробной информации. Например,
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 может быть одним из следующих:
-
Строка, состоящая из 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. - Целое число, которое помещается в 32 бита. Это эквивалентно сети с единственным адресом, где адрес сети — address, а маска —
/32. - Целое число, упакованное в объект
bytesдлиной 4 байта, в формате big-endian. Интерпретация аналогична целому числу address. - Двухэлементная кортеж из описания адреса и маски сети, где описание адреса может быть строкой, 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 может быть одним из следующих:
-
Строка, содержащая IP-адрес и необязательную длину префикса, разделенные слэшем (
/). IP-адрес — это адрес сети, а длина префикса должна быть одним числом, prefix. Если длина префикса не указана, она считается/128.Обратите внимание, что в настоящее время расширенные маски подсети не поддерживаются. Это означает, что
2001:db00::0/24является допустимым аргументом, в то время как2001:db00::0/ffff:ff00::— нет. - Целое число, помещающееся в 128 бит. Это эквивалентно сети с одним адресом, где адрес сети — address, а маска —
/128. - Целое число, упакованное в объект
bytesдлиной 16 байт, в формате big-endian. Интерпретация аналогична целому числу address. - Двухэлементная кортеж из описания адреса и маски подсети, где описание адреса может быть строкой, 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