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 (начинающимися с
::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 интерфейс. Значение параметра адрес такое же, как в конструкторе
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 интерфейс. Значение параметра адрес такое же, как в конструкторе
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 упакованных байта в сетевом (большим порядком байтов) порядке. адрес — это целочисленное представление IPv4 IP-адреса. Если целое число отрицательное или слишком большое, чтобы быть IPv4 IP-адресом, возникает
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 упакованных байтов в сетевом (большим порядком байтов) порядке. адрес — это целочисленное представление IPv6 IP-адреса. Если целое число отрицательное или слишком большое, чтобы быть IPv6 IP-адресом, возникает
ValueError.
-
ipaddress.summarize_address_range(first, last) -
Возвращает итератор с диапазоном суммированной сети, заданной первым и последним IP-адресами. первый — это первый
IPv4AddressилиIPv6Addressв диапазоне, а последний — это последнийIPv4AddressилиIPv6Addressв диапазоне.TypeErrorвозникает, если первый или последний не являются IP-адресами или не имеют одинаковой версии.ValueErrorвозникает, если последний не больше первого или версия адреса первого не равна 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объектами. адреса — это итератор изIPv4NetworkилиIPv6Networkобъектов.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отсортировал их. Если вам нужно это сделать, вы можете использовать эту функцию как аргумент ключ дляsorted().объект — это объект сети или адреса.
Пользовательские исключения
Для поддержки более специфического отчёта об ошибках от конструкторов классов, модуль определяет следующие исключения:
-
exception ipaddress.AddressValueError(ValueError) -
Любая ошибка значения, связанная с адресом.
-
exception ipaddress.NetmaskValueError(ValueError) -
Любая ошибка значения, связанная с маской сети.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/ipaddress.html