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.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соответствующей длины (самый старший октет первым). Для 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если адрес выделен для частных сетей. См. 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если адрес зарезервирован для использования в локальной сети. Обратите внимание, что пространство адресов локальной сети устарело в 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, это свойство вернёт вложенную пару адресов(server, client)IP. Для любого другого адреса это свойство будет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 байта, в формате 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) -
Вычисляет определения сетей, полученные в результате удаления заданной сети из этой. Возвращает итератор объектов сети. Возбуждает
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; а маска подсети — целое число, представляющее длину префикса.
Если address не является допустимым IPv6-адресом, генерируется исключение
AddressValueError. Если маска не является допустимой для IPv6-адреса, генерируется исключениеNetmaskValueError.Если strict равно
Trueи в предоставленном адресе установлены биты хоста, то генерируется исключениеValueError. В противном случае биты хоста маскируются для определения соответствующего адреса сети.Изменено в версии 3.5: Добавлен двухэлементный кортеж в качестве параметра конструктора address.
-
version
-
max_prefixlen
-
is_multicast
-
is_private
-
is_unspecified
-
is_reserved
-
is_loopback
-
is_link_local
-
network_address
-
broadcast_address
-
hostmask
-
netmask
-
with_prefixlen
-
compressed
-
exploded
-
with_netmask
-
with_hostmask
-
num_addresses
-
prefixlen
-
hosts() -
Возвращает итератор по используемым хостам в сети. Используемые хосты — это все IP-адреса, принадлежащие сети, за исключением адресной группы anycast роутера подсети. Для сетей с длиной маски 127 адресной группе anycast роутера подсети также будет включён в результат. Сети с маской 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 упакованных байта в сетевом (big-endian) порядке. address — целочисленное представление адреса IPv4. Если целое число отрицательное или слишком большое для адреса IPv4, возникает
ValueError.>>> ipaddress.ip_address(3221225985) IPv4Address('192.0.2.1') >>> ipaddress.v4_int_to_packed(3221225985) b'\xc0\x00\x02\x01'
-
ipaddress.v6_int_to_packed(address) -
Представляет адрес как 16 упакованных байтов в сетевом (big-endian) порядке. address — целочисленное представление адреса IPv6. Если целое число отрицательное или слишком большое для адреса IPv6, возникает
ValueError.
-
ipaddress.summarize_address_range(first, last) -
Возвращает итератор с суммарным диапазоном сети, заданным начальным и конечным IP-адресами. first — первый
IPv4AddressилиIPv6Addressв диапазоне, а last — последнийIPv4AddressилиIPv6Addressв диапазоне. Если first или last не являются IP-адресами или не имеют одинаковой версии, возникаетTypeError. Если last не больше first или версия адреса first не 4 или 6, возникаетValueError.>>> [ipaddr for ipaddr in ipaddress.summarize_address_range( ... ipaddress.IPv4Address('192.0.2.0'), ... ipaddress.IPv4Address('192.0.2.130'))] [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
-
ipaddress.collapse_addresses(addresses) -
Возвращает итератор с объединёнными объектами
IPv4NetworkилиIPv6Network. addresses — итератор объектовIPv4NetworkилиIPv6Network. Если addresses содержит объекты смешанных версий, возникаетTypeError.>>> [ipaddr for ipaddr in ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), ... ipaddress.IPv4Network('192.0.2.128/25')])] [IPv4Network('192.0.2.0/24')]
-
ipaddress.get_mixed_type_key(obj) -
Возвращает ключ, подходящий для сортировки сетей и адресов. Объекты Address и Network по умолчанию не сортируются; они фундаментально разные, поэтому выражение:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')не имеет смысла. Однако есть случаи, когда вы можете захотеть, чтобы
ipaddressвсё равно сортировал их. Если вам нужно это сделать, вы можете использовать эту функцию в качестве аргумента key дляsorted().obj — это объект сети или адреса.
Пользовательские исключения
Для поддержки более конкретного отчёта об ошибках от конструкторов классов, модуль определяет следующие исключения:
-
exception ipaddress.AddressValueError(ValueError) -
Любая ошибка значения, связанная с адресом.
-
exception ipaddress.NetmaskValueError(ValueError) -
Любая ошибка значения, связанная с маской сети.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/ipaddress.html