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 может иметь следующий вид:
- Строка в десятичной точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделённых точками (например,
192.168.0.1). Каждое целое число представляет октет (байт) адреса. Ведущие нули не допускаются, чтобы избежать путаницы с восьмеричной нотацией. - Целое число, помещающееся в 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')Изменено в версии 3.8: Ведущие нули допускаются, даже в неоднозначных случаях, похожих на восьмеричную нотацию.
Изменено в версии 3.9.5: Ведущие нули больше не допускаются и считаются ошибкой. Строки адресов IPv4 теперь разбираются так же строго, как в glibc
inet_pton().-
version -
Номер соответствующей версии:
4для IPv4,6для IPv6.Изменено в версии 3.14: Атрибут стал доступен на уровне класса.
-
max_prefixlen -
Общее количество битов в представлении адреса для этой версии:
32для IPv4,128для IPv6.Префикс задаёт количество начальных битов адреса, по которым определяется, принадлежит ли адрес сети.
Изменено в версии 3.14: Атрибут стал доступен на уровне класса.
-
compressed
-
exploded -
Строковое представление в десятичной точечной нотации. Ведущие нули в представление никогда не включаются.
Поскольку в IPv4 не определена сокращённая нотация для адресов с нулевыми октетами, для адресов IPv4 оба этих атрибута всегда совпадают с
str(addr). Наличие этих атрибутов упрощает написание кода отображения, способного обрабатывать адреса IPv4 и IPv6.
-
packed -
Двоичное представление этого адреса — объект
bytesсоответствующей длины (от старшего октета к младшему). Для IPv4 это 4 байта, а для IPv6 — 16 байт.
-
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, если согласно реестру специальных адресов IPv4 IANA (для IPv4) или реестру специальных адресов IPv6 IANA (для IPv6) адрес не является глобально доступным, за следующими исключениями:-
is_privateимеет значениеFalseдля общего адресного пространства (100.64.0.0/10) -
Для адресов IPv4, отображённых в IPv6, значение
is_privateопределяется семантикой базовых адресов IPv4, и выполняется следующее условие (см.IPv6Address.ipv4_mapped):address.is_private == address.ipv4_mapped.is_private
Значение
is_privateпротивоположно значениюis_global, за исключением общего адресного пространства (диапазон100.64.0.0/10), где оба значения равныFalse.Изменено в версии 3.13: Исправлены некоторые ложноположительные и ложноотрицательные результаты.
-
192.0.0.0/24считается частным, за исключением192.0.0.9/32и192.0.0.10/32(ранее частным считался только поддиапазон192.0.0.0/29). -
64:ff9b:1::/48считается частным. -
2002::/16считается частным. - Внутри
2001::/23есть исключения (в остальном он считается частным):2001:1::1/128,2001:1::2/128,2001:3::/32,2001:4:112::/48,2001:20::/28,2001:30::/28. Эти исключения не считаются частными.
-
-
is_global -
True, если согласно реестру специальных адресов IPv4 IANA (для IPv4) или реестру специальных адресов IPv6 IANA (для IPv6) адрес является глобально доступным, со следующим исключением:Для адресов IPv4, отображённых в IPv6, значение
is_privateопределяется семантикой базовых адресов IPv4, и выполняется следующее условие (см.IPv6Address.ipv4_mapped):address.is_global == address.ipv4_mapped.is_global
Значение
is_globalпротивоположно значениюis_private, за исключением общего адресного пространства (диапазон100.64.0.0/10), где оба значения равныFalse.Добавлено в версии 3.4.
Изменено в версии 3.13: Исправлены некоторые ложноположительные и ложноотрицательные результаты; подробности см. в описании
is_private.
-
is_reserved -
True, если адрес отмечен IETF как зарезервированный. Для IPv4 это только240.0.0.0/4— блок адресовReserved. Для IPv6 это все адреса, выделенные дляReserved by IETFбудущего использования.Примечание
Для IPv4
is_reservedне связано со значением блока адресов в столбцеReserved-by-Protocolреестра специальных адресов IPv4 IANA.Внимание
Для IPv6
fec0::/10бывший префикс адресов с областью действия «локальный сайт» в настоящее время исключён из этого списка (см.is_site_localи RFC 3879).
-
is_link_local -
True, если адрес зарезервирован для локального использования в канале. См. RFC 3927.
-
ipv6_mapped -
IPv4Addressобъект, представляющий адрес IPv4, отображённый в IPv6. См. RFC 4291.Добавлено в версии 3.13.
- Строка в десятичной точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделённых точками (например,
-
IPv4Address.__format__(fmt) -
Возвращает строковое представление IP-адреса, заданное явной строкой формата. Параметр fmt может принимать одно из следующих значений:
's'— вариант по умолчанию, эквивалентныйstr();'b'— строка двоичного представления с нулями в начале;'X'или'x'— представление в шестнадцатеричном формате с заглавными или строчными буквами; либо'n', эквивалентный'b'для адресов IPv4 и'x'для IPv6. Для двоичного и шестнадцатеричного представлений доступны спецификатор формата'#'и параметр группировки'_'.__format__используется функциямиformat,str.formatи f-строками.>>> format(ipaddress.IPv4Address('192.168.0.1')) '192.168.0.1' >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1')) '0b11000000101010000000000000000001' >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}' '2001:db8::1000' >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X') '2001_0DB8_0000_0000_0000_0000_0000_1000' >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000')) '0x2001_0db8_0000_0000_0000_0000_0000_1000'Добавлено в версии 3.9.
-
class ipaddress.IPv6Address(address) -
Создаёт адрес IPv6. Если address не является допустимым адресом IPv6, возникает исключение
AddressValueError.Допустимый адрес IPv6 может иметь следующий вид:
-
Строка из восьми групп по четыре шестнадцатеричные цифры, каждая группа представляет 16 бит. Группы разделяются двоеточиями. Это полная (развёрнутая) запись. Строку также можно различными способами сократить (использовать краткую запись). Подробности см. в RFC 4291. Например,
"0000:0000:0000:0000:0000:0abc:0007:0def"можно сократить до"::abc:7:def".При желании строка может также содержать идентификатор зоны области действия, указанный суффиксом
%scope_id. Если он присутствует, идентификатор области действия не должен быть пустым и не может содержать%. Подробности см. в RFC 4007. Например,fe80::1234%1может обозначать адресfe80::1234на первом канале узла. - Целое число, помещающееся в 128 бит.
- Целое число, упакованное в объект
bytesдлиной 16 байт в порядке от старшего байта к младшему.
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000') >>> ipaddress.IPv6Address('ff02::5678%1') IPv6Address('ff02::5678%1')-
compressed
Краткая форма представления адреса: начальные нули в группах опускаются, а самая длинная последовательность групп, состоящих только из нулей, сворачивается в одну пустую группу.
Это также значение, возвращаемое
str(addr)для адресов IPv6.-
exploded
Полная форма представления адреса, в которой сохранены все начальные нули и группы, состоящие только из нулей.
Описание следующих атрибутов и методов см. в соответствующей документации класса
IPv4Address:-
packed
-
reverse_pointer
-
version
-
max_prefixlen
-
is_multicast
-
is_private
-
is_global -
Добавлено в версии 3.4.
-
is_unspecified
-
is_reserved
-
is_loopback
-
is_link_local
-
is_site_local -
True, если адрес зарезервирован для локального использования в пределах сайта. Обратите внимание, что адресное пространство локальных адресов сайта было объявлено устаревшим в RFC 3879. Используйтеis_private, чтобы проверить, входит ли этот адрес в пространство уникальных локальных адресов, определённое в RFC 4193.
-
ipv4_mapped -
Для адресов, похожих на отображённые адреса IPv4 в диапазоне
::FFFF:0:0/96, определённом в RFC 4291, это свойство возвращает встроенный адрес IPv4. Для любого другого адреса это свойство будет иметь значениеNone.
-
scope_id -
Для адресов с областью действия, определённых в RFC 4007, это свойство в виде строки указывает конкретную зону области действия, к которой относится адрес. Если зона области действия не задана, это свойство будет иметь значение
None.
-
sixtofour -
Для адресов, похожих на адреса 6to4 (начинающихся с
2002::/16), определённые в RFC 3056, это свойство возвращает встроенный адрес IPv4. Для любого другого адреса это свойство будет иметь значениеNone.
-
teredo -
Для адресов, похожих на адреса Teredo (начинающихся с
2001::/32), определённые в RFC 4380, это свойство возвращает встроенную пару IP-адресов(server, client). Для любого другого адреса это свойство будет иметь значениеNone.
-
-
IPv6Address.__format__(fmt) -
См. описание соответствующего метода в
IPv4Address.Добавлено в версии 3.9.
Преобразование в строки и целые числа
Для взаимодействия с сетевыми интерфейсами, такими как модуль 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
Обратите внимание, что адреса IPv6 с областью действия преобразуются в целые числа без идентификатора зоны.
Операторы
Для объектов адресов поддерживаются некоторые операторы. Если не указано иное, операторы можно применять только к совместимым объектам (то есть IPv4 с IPv4, IPv6 с 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
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
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-адресов, которые после применения маски (побитовое AND) совпадают с сетевым адресом. Например, определение сети с маской 255.255.255.0 и сетевым адресом 192.168.1.0 охватывает IP-адреса в диапазоне от 192.168.1.0 до 192.168.1.255 включительно.
Префикс, сетевая маска и маска узла
Существует несколько эквивалентных способов задания масок IP-сетей. Префикс /<nbits> — это обозначение количества старших битов, установленных в сетевой маске. Сетевая маска — это IP-адрес, в котором установлено некоторое количество старших битов. Таким образом, префикс /24 в IPv4 эквивалентен сетевой маске 255.255.255.0, а в IPv6 — ffff:ff00::. Кроме того, маска узла является логической инверсией сетевой маски и иногда используется (например, в списках контроля доступа Cisco) для обозначения сетевой маски. Маска узла, эквивалентная /24 в IPv4, — это 0.0.0.255.
Объекты сетей
Все атрибуты, реализованные в объектах адресов, реализованы также и в объектах сетей. Кроме того, объекты сетей реализуют дополнительные атрибуты. Все они являются общими для 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 байта в порядке от старшего байта к младшему. Интерпретация аналогична целочисленному значению 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 -
Эти атрибуты имеют значение 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 в результат также включаются сетевой и широковещательный адреса. Для сетей с маской 32 возвращается список, содержащий единственный адрес узла.
>>> 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')] >>> list(ip_network('192.0.2.1/32').hosts()) [IPv4Address('192.0.2.1')]
-
overlaps(other) -
Возвращает
True, если эта сеть частично или полностью входит в other либо other полностью входит в эту сеть.
-
address_exclude(network) -
Вычисляет определения сетей, полученные удалением указанной network из этой сети. Возвращает итератор объектов сетей. Если 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')
-
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 можно указать одно из следующего:
-
Строку, состоящую из IP-адреса и необязательной длины префикса, разделённых косой чертой (
/). IP-адрес является сетевым адресом, а длина префикса должна быть одним числом — префиксом. Если длина префикса не указана, предполагается/128.Обратите внимание, что в настоящее время развёрнутые сетевые маски не поддерживаются. Это означает, что
2001:db00::0/24является допустимым аргументом, а2001:db00::0/ffff:ff00::— нет. - Целое число, помещающееся в 128 бит. Оно эквивалентно сети с одним адресом, где сетевой адрес задаётся значением address, а маска —
/128. - Целое число, упакованное в объект
bytesдлиной 16 байт в порядке от старшего байта к младшему. Интерпретация аналогична целочисленному значению 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-адреса Subnet-Router. Для сетей с длиной маски 127 anycast-адрес Subnet-Router также включается в результат. Для сетей с маской 128 возвращается список, содержащий единственный адрес узла.
-
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 можно сравнивать; при сортировке объекты адресов всегда располагаются перед объектами интерфейсов. Сначала два объекта интерфейсов сравниваются по их сетям, а если сети совпадают — по IP-адресам.
Другие функции уровня модуля
Модуль также предоставляет следующие функции уровня модуля:
-
ipaddress.v4_int_to_packed(address) -
Представляет адрес в виде 4 упакованных байтов в сетевом порядке (от старшего байта к младшему). address — целочисленное представление IP-адреса IPv4. Если целое число отрицательно или слишком велико, чтобы быть IP-адресом 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 упакованных байтов в сетевом порядке (от старшего байта к младшему). address — целочисленное представление IP-адреса IPv6. Если целое число отрицательно или слишком велико, чтобы быть IP-адресом 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) -
Возвращает ключ, подходящий для сортировки сетей и адресов. По умолчанию объекты адресов и сетей не сортируются: это принципиально разные типы, поэтому выражение:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')не имеет смысла. Однако иногда может потребоваться, чтобы
ipaddressсортировала их вместе. Для этого можно передать эту функцию в качестве аргумента key функцииsorted().obj — это объект сети или адреса.
Пользовательские исключения
Для более точного сообщения об ошибках в конструкторах классов модуль определяет следующие исключения:
-
exception ipaddress.AddressValueError(ValueError) -
Любая ошибка значения, связанная с адресом.
-
exception ipaddress.NetmaskValueError(ValueError) -
Любая ошибка значения, связанная с сетевой маской.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/ipaddress.html