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-адрес. Если адрес не является допустимым 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.10: Ведущие нули больше не допускаются и обрабатываются как ошибка. Строки IPv4-адресов теперь анализируются так же строго, как glibc
inet_pton().Изменено в версии 3.9.5: Это изменение также было включено в Python 3.9, начиная с версии 3.9.5.
Изменено в версии 3.8.12: Это изменение также было включено в Python 3.8, начиная с версии 3.8.12.
-
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 по другим причинам.
-
is_link_local -
Trueесли адрес зарезервирован для использования в локальной сети. См. RFC 3927.
- Строкой в десятично-точечной нотации, состоящей из четырёх десятичных целых чисел в диапазоне от 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 байт, в формате big-endian.
>>> 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
-
is_unspecified
-
is_reserved
-
is_loopback
-
is_link_local -
Новое в версии 3.4: is_global
-
is_site_local -
Trueесли адрес зарезервирован для использования в пределах сайта. Обратите внимание, что адресное пространство site-local устарело согласно RFC 3879. Используйтеis_privateдля проверки, находится ли этот адрес в пространстве уникальных локальных адресов, как определено в RFC 4193.
-
ipv4_mapped -
Для адресов, которые, по-видимому, являются адресами IPv4 (начинающимися с
::FFFF/96), это свойство будет сообщать об вложенном адресе IPv4. Для любых других адресов это свойство будетNone.
-
scope_id -
Для адресов с областью, как определено в RFC 4007, это свойство идентифицирует конкретную зону области адреса, к которой принадлежит адрес, в виде строки. Если зона не указана, это свойство будет
None.
-
sixtofour -
Для адресов, которые, по-видимому, являются адресами 6to4 (начинающимися с
2002::/16) как определено в RFC 3056, это свойство будет сообщать об вложенном адресе IPv4. Для любых других адресов это свойство будетNone.
-
teredo -
Для адресов, которые, по-видимому, являются адресами Teredo (начинающимися с
2001::/32) как определено в RFC 4380, это свойство будет сообщать об вложенной паре адресов(server, client)IP. Для любых других адресов это свойство будетNone.
-
IPv6Address.__format__(fmt) -
См. соответствующую документацию метода в
IPv4Address.Новое в версии 3.9.
-
Преобразование в строки и целые числа
Для взаимодействия с сетевыми интерфейсами, такими как модуль сокетов, адреса должны быть преобразованы в строки или целые числа. Это обрабатывается с помощью встроенных функций 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 байта, в формате 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 адреса сети и широковещательной рассылки сети также включены в результат. Сети с маской 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 из этой. Возвращает итератор объектов сети. Возбуждает
ValueError, если network не полностью содержится в этой сети.>>> n1 = ip_network('192.0.2.0/28') >>> n2 = ip_network('192.0.2.1/32') >>> list(n1.address_exclude(n2)) [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
-
subnets(prefixlen_diff=1, new_prefix=None) -
Подсети, которые объединяются, чтобы создать текущее определение сети, в зависимости от значений аргументов. prefixlen_diff — это значение, на которое должна быть увеличена длина нашего префикса. new_prefix — желаемый новый префикс подсетей; он должен быть больше нашего префикса. Должен быть установлен только один из prefixlen_diff и new_prefix. Возвращает итератор объектов сети.
>>> list(ip_network('192.0.2.0/24').subnets()) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
-
supernet(prefixlen_diff=1, new_prefix=None) -
Суперсеть, содержащая это определение сети, в зависимости от значений аргументов. prefixlen_diff — это значение, на которое должна быть уменьшена длина нашего префикса. new_prefix — желаемый новый префикс суперсети; он должен быть меньше нашего префикса. Должен быть установлен только один из prefixlen_diff и new_prefix. Возвращает единственный объект сети.
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
-
subnet_of(other) -
Возвращает
Trueесли эта сеть является подсетью other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) TrueНовое в версии 3.7.
-
supernet_of(other) -
Возвращает
Trueесли эта сеть является суперсетью other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) TrueНовое в версии 3.7.
-
compare_networks(other) -
Сравнивает эту сеть с other. В этом сравнении учитываются только адреса сети; биты хоста не учитываются. Возвращает либо
-1, либо0, либо1.>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0Устарело начиная с версии 3.7: Использует тот же алгоритм упорядочения и сравнения, что и “<”, “==” и “>”
-
-
class ipaddress.IPv6Network(address, strict=True) -
Создать определение сети IPv6. address может быть одним из следующих:
-
Строка, состоящая из IP-адреса и необязательной длины префикса, разделённых слэшем (
/). IP-адрес — это адрес сети, а длина префикса должна быть одиночным числом, prefix. Если длина префикса не указана, она считается/128.Обратите внимание, что в настоящее время расширенные маски сетей не поддерживаются. Это означает, что
2001:db00::0/24является допустимым аргументом, а2001:db00::0/ffff:ff00::— нет. - Целое число, которое помещается в 128 бит. Это эквивалентно сети с одним адресом, где адресом сети является address, а маска —
/128. - Целое число, упакованное в объект
bytesдлиной 16 байт, в формате big-endian. Интерпретация аналогична целому числу address. - Двухэлементная кортеж из описания адреса и маски сети, где описание адреса — это либо строка, целое число 128 бит, упакованное целое число 16 байт или существующий объект IPv6Address; и маска сети — целое число, представляющее длину префикса.
AddressValueErrorгенерируется, если address не является допустимым 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 подсети-маршрутизатора также включается в результат. Сети с маской 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-адресам.
Другие функции уровня модуля
Модуль также предоставляет следующие функции уровня модуля:
-
ipaddress.v4_int_to_packed(address) -
Представление адреса в виде 4 упакованных байтов в сетевом (большая эндианность) порядке. 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 упакованных байтов в сетевом (большая эндианность) порядке. 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 — объект сети или адреса.
Пользовательские исключения
Для поддержки более специфичной отчетности об ошибках из конструкторов классов в модуле определены следующие исключения:
-
exception ipaddress.AddressValueError(ValueError) -
Любая ошибка значения, связанная с адресом.
-
exception ipaddress.NetmaskValueError(ValueError) -
Любая ошибка значения, связанная с маской сети.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/ipaddress.html