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.
-
max_prefixlen -
Общее количество битов в представлении адреса для этой версии:
32для IPv4,128для IPv6.Префикс задаёт количество старших битов адреса, сравниваемых для определения того, принадлежит ли адрес сети.
-
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бывший префикс адресов с областью действия Site-Local в настоящее время исключён из этого списка (см.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, если адрес зарезервирован для локального использования в пределах сайта. Обратите внимание, что пространство адресов Site-Local признано устаревшим в RFC 3879. Используйтеis_private, чтобы проверить, входит ли этот адрес в пространство уникальных локальных адресов, определённое в RFC 4193.
-
ipv4_mapped -
Для адресов, похожих на адреса IPv4, отображённые в IPv6 (начинающихся с
::FFFF/96), это свойство возвращает встроенный адрес 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-адресов, которые при наложении маски (побитовое И) совпадают с сетевым адресом. Например, определение сети с маской 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 может принимать одно из следующих значений:
-
Строка, состоящая из 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) -
Возвращает ключ, подходящий для сортировки сетей и адресов. По умолчанию объекты 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–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/ipaddress.html