ipaddress
— Библиотека манипуляций с IPv4/IPv6¶
Исходный код: Lib/ipaddress.py
ipaddress
предоставляет возможности для создания адресов и сетей IPv4 и IPv6, манипулирования ими и работы с ними.
Функции и классы в этом модуле упрощают выполнение различных задач, связанных с IP-адресами, включая проверку того, находятся ли два хоста в одной подсети, перебор всех хостов в определенной подсети, проверку того, является ли строка допустимым IP-адресом или определением сети, и так далее.
Это полный справочник по API модуля — обзор и введение см. в разделе Введение в модуль ip-адресов.
Добавлено в версии 3.3.
Удобные заводские функции¶
Модуль ipaddress
предоставляет заводские функции для удобного создания IP-адресов, сетей и интерфейсов:
- ipaddress.ip_address(address)¶
Возвращает объект
IPv4Address
илиIPv6Address
в зависимости от IP-адреса, переданного в качестве аргумента. Могут быть указаны адреса IPv4 или IPv6; целые числа, меньшие2**32
, по умолчанию будут считаться IPv4. ЗначениеValueError
выдается, если address не соответствует действительному адресу IPv4 или IPv6.>>> 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-адреса, переданного в качестве аргумента. адрес - это строка или целое число, представляющее IP-сеть. Могут быть предоставлены сети IPv4 или IPv6; целые числа, меньшие, чем2**32
, по умолчанию будут считаться IPv4. strict передается в конструкторIPv4Network
илиIPv6Network
. ЗначениеValueError
выдается, если address не соответствует действительному адресу IPv4 или IPv6, или если в сети установлены биты хоста.>>> 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. ЗначениеValueError
выдается, если address не соответствует действительному адресу IPv4 или IPv6.
Одним из недостатков этих удобных функций является то, что необходимость обрабатывать оба формата IPv4 и IPv6 означает, что сообщения об ошибках содержат минимальную информацию о конкретной ошибке, поскольку функции не знают, какой формат был предназначен - IPv4 или IPv6. Более подробные отчеты об ошибках можно получить, вызвав напрямую соответствующие конструкторы классов, зависящие от версии.
IP-адреса¶
Адресные объекты¶
Объекты IPv4Address
и IPv6Address
имеют много общих атрибутов. Некоторые атрибуты, которые имеют значение только для IPv6-адресов, также реализуются объектами IPv4Address
, чтобы упростить написание кода, который корректно обрабатывает обе версии IP. Объекты Address имеют hashable, поэтому их можно использовать в качестве ключей в словарях.
- class ipaddress.IPv4Address(address)¶
Создайте IPv4-адрес. Значение
AddressValueError
задается, если address не является допустимым IPv4-адресом.Действительным 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 не определяет сокращенное обозначение для адресов с нулевыми октетами, эти два атрибута всегда совпадают с
str(addr)
для адресов IPv4. Предоставление этих атрибутов упрощает написание кода отображения, который может обрабатывать как IPv4, так и IPv6-адреса.
- packed¶
Двоичное представление этого адреса - объект
bytes
соответствующей длины (первый по старшинству октет). Это 4 байта для IPv4 и 16 байт для IPv6.
- 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_private
- этоFalse
для общего адресного пространства (100.64.0.0/10
)Для IPv6-адресов, сопоставленных с IPv4, значение
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.11.10: Исправлены некоторые ложноположительные и ложноотрицательные срабатывания.
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
если адрес определен как глобально доступный с помощью iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6), за следующим исключением:Для IPv6-адресов, сопоставленных с IPv4, значение
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.11.10: Исправлены некоторые ложноположительные и ложноотрицательные срабатывания, подробности смотрите в разделе
is_private
.
- is_reserved¶
True
если адрес в противном случае зарезервирован по стандарту IETF.
- 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-адрес. Значение
AddressValueError
задается, если address не является допустимым IPv6-адресом.Действительным 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¶
- 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
.
- 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 преобразуются в целые числа без идентификатора зоны действия.
Операторы¶
Объекты Address поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPV44, IPv6 с IPV66).
Операторы сравнения¶
Объекты адресов можно сравнивать с помощью обычного набора операторов сравнения. Одни и те же 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
. Сетевыми объектами являются hashable, поэтому их можно использовать в качестве ключей в словарях.
- class ipaddress.IPv4Network(address, strict=True)¶
Создайте определение сети IPv4. адрес может быть одним из следующих:
Строка, состоящая из 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, в порядке возрастания. Интерпретация аналогична целочисленному адресу.Два кортежа, состоящие из описания адреса и маски сети, где описание адреса представляет собой либо строку, 32-разрядное целое число, 4-байтовое целое число в упаковке, либо существующий объект IPv4address; а маска сети представляет собой либо целое число, представляющее длину префикса (например,
24
) или строка, представляющая префиксную маску (например,255.255.255.0
).
Значение
AddressValueError
указывается, если address не является допустимым IPv4-адресом. ЗначениеNetmaskValueError
указывается, если маска недопустима для IPv4-адреса.Если значение 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¶
Строковое представление сети с маской в нотации 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
если эта сеть частично или полностью содержится в другой или другая полностью содержится в этой сети.
- address_exclude(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)¶
Сравните эту сеть с другой. В этом сравнении учитываются только сетевые адреса, биты хоста - нет. Возвращает либо
-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. адрес может быть одним из следующих:
Строка, состоящая из IP-адреса и необязательной длины префикса, разделенных косой чертой (
/
). IP-адрес - это сетевой адрес, а длина префикса должна состоять из одного числа, префикса *. Если длина префикса не указана, то считается, что она равна/128
.Обратите внимание, что в настоящее время расширенные сетевые маски не поддерживаются. Это означает, что
2001:db00::0/24
является допустимым аргументом, а2001:db00::0/ffff:ff00::
- нет.Целое число, которое вмещается в 128 бит. Это эквивалентно сети с одним адресом, где сетевой адрес равен address, а маска равна
/128
.Целое число, упакованное в объект
bytes
длиной 16, в порядке возрастания. Интерпретация аналогична целочисленному адресу.Два кортежа, состоящие из описания адреса и маски сети, где описание адреса представляет собой либо строку, 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 в результат также включается сетевой адрес подсети-маршрутизатора. Сети с маской 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¶
Этот атрибут является истинным для сети в целом, если он верен как для сетевого адреса, так и для широковещательного адреса.
Операторы¶
Сетевые объекты поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPV44, IPv6 с IPV66).
Логические операторы¶
Сетевые объекты можно сравнить с обычным набором логических операторов. Сетевые объекты упорядочиваются сначала по сетевому адресу, затем по маске сети.
Итерация¶
Сетевые объекты можно перебирать, чтобы получить список всех адресов, принадлежащих сети. Для перебора возвращаются все хосты, включая неиспользуемые хосты (для используемых хостов используйте метод 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
Объекты интерфейса¶
Объекты интерфейса имеют значение hashable, поэтому их можно использовать в качестве ключей в словарях.
- 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 с IPV44, IPv6 с IPV66).
Логические операторы¶
Объекты интерфейса можно сравнить с обычным набором логических операторов.
Для сравнения на равенство (==
и !=
) IP-адрес и сеть должны быть одинаковыми, чтобы объекты были равны. Интерфейс не будет сравниваться с каким-либо адресом или сетевым объектом.
Для упорядочивания (<
, >
, и т.д.) применяются другие правила. Можно сравнивать объекты интерфейса и адреса с одинаковой версией IP, и объекты адреса всегда будут сортироваться перед объектами интерфейса. Два объекта интерфейса сначала сравниваются по их сетям и, если они совпадают, то по их IP-адресам.
Другие функции на уровне модуля¶
Модуль также предоставляет следующие функции на уровне модуля:
- ipaddress.v4_int_to_packed(address)¶
Представляет адрес в виде 4 упакованных байт в сетевом порядке (в порядке возрастания). address - это целочисленное представление IP-адреса IPv4. Значение
ValueError
задается, если целое число отрицательное или слишком большое, чтобы быть IP-адресом 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 - это целочисленное представление IP-адреса IPv6. Значение
ValueError
задается, если целое число отрицательное или слишком большое для IP-адреса IPv6.
- ipaddress.summarize_address_range(first, last)¶
Возвращает итератор суммарного сетевого диапазона с учетом первого и последнего IP-адресов. первый - это первый
IPv4Address
илиIPv6Address
в диапазоне, а последний - это последний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
все равно их отсортировали. Если вам нужно это сделать, вы можете использовать эту функцию в качестве ключевого аргумента дляsorted()
.obj - это либо сетевой, либо адресный объект.
Пользовательские исключения¶
Чтобы поддерживать более конкретные сообщения об ошибках от конструкторов классов, модуль определяет следующие исключения:
- exception ipaddress.AddressValueError(ValueError)¶
Любая ошибка в значении, связанная с адресом.
- exception ipaddress.NetmaskValueError(ValueError)¶
Любая ошибка в значении, связанная с сетевой маской.