ipaddress
— Библиотека манипулирования IPv4/IPv6
ipaddress
предоставляет возможности для создания, управления и работы с
адресами и сетями IPv4/IPv6.
Функции и классы в данном модуле упрощают выполнение различных задач, связанных с IP-адресами, включая проверку того, находятся ли два хоста в одной и той же подсети, перебор всех хостов в подсети, проверку того, представляет ли строка допустимое значение IP-адреса или адреса сети и т. д.
Это полный справочник по API модуля — обзор и введение см. в статье Знакомство с модулем ipaddress.
Добавлено в версии 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-адреса, переданного в качестве аргумента. address — это строка или целое число, представляющее 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. Более подробные отчёты об ошибках можно получить, напрямую вызвав соответствующие конструкторы класса для заданной версии.
IP-адреса
Адресные объекты
Объекты IPv4Address
и IPv6Address
имеют много общих
атрибутов. Некоторые атрибуты, имеющие значение только для адресов IPv6, также
реализуются объектами IPv4Address
, чтобы упростить написание кода,
правильно обрабатывающего обе версии IP. Адресные объекты
хэшируемы, поэтому их можно использовать в качестве ключей в словарях.
-
class
ipaddress.
IPv4Address
(address) Создать адрес IPv4. Вызывается
AddressValueError
, если address не является допустимым адресом IPv4.Следующее представляет собой правильный адрес IPv4:
- Строка в десятично-точечной нотации, состоящая из четырёх
десятичных целых чисел в диапазоне от 0 до 255 включительно,
разделенных точками (например,
192.168.0.1
). Каждое целое число представляет собой октет (байт) в адресе. Начальные нули допускаются только для значений меньше 8 (поскольку нет никакой неоднозначности между десятичной и восьмеричной интерпретацией таких строк). - Целое число, умещающееся в 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')
-
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_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 включительно,
разделенных точками (например,
-
class
ipaddress.
IPv6Address
(address) Создать адрес IPv6. Вызывается
AddressValueError
, если address не является допустимым IPv6 адресом.Следующее представляет собой правильный IPv6 адрес:
- Строка, состоящая из восьми групп по четыре шестнадцатеричных
цифры, каждая группа представляет 16 бит. Группы разделяются
двоеточием. Определяет разбухшую нотацию (от руки). Строка
также может быть сжата (сокращённая запись) различными
способами. Подробности см. в RFC 4291. Например,
"0000:0000:0000:0000:0000:0abc:0007:0def"
можно сжать до"::abc:7:def"
. - Целое число, умещающееся в 128 бит.
- Целое число, упакованное в объект
bytes
длины 16 с обратным - порядком байтов.
- Целое число, упакованное в объект
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000')
-
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
.
-
sixtofour
Для адресов, которые выглядят как адреса 6to4 (начиная с
2002::/16
), как определено RFC 3056, это свойство будет сообщать о встроенном IPv4-адресе. Для любого другого адреса это свойство будетNone
.
-
teredo
Для адресов, которые выглядят как адреса Teredo (начиная с
2001::/32
), как определено RFC 4380, это свойство будет сообщать о встроенной паре IP-адресов(server, client)
. Для любого другого адреса это свойство будетNone
.
- Строка, состоящая из восьми групп по четыре шестнадцатеричных
цифры, каждая группа представляет 16 бит. Группы разделяются
двоеточием. Определяет разбухшую нотацию (от руки). Строка
также может быть сжата (сокращённая запись) различными
способами. Подробности см. в RFC 4291. Например,
Преобразование в строки и целые числа
Для взаимодействия с сетевыми интерфейсами, через модуль 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
Операторы
Адресные объекты поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPv4, 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
Арифметические операторы
Целые числа можно добавлять или вычитать из адресных объектов. Примеры
>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
Определения IP-сети
Объекты IPv4Network
и IPv6Network
предоставляют механизм для
определения и проверки определений IP-сетей. Определение сети состоит из маски
и адреса сети, определяющее диапазон IP-адресов, равных
сетевому адресу при маскировании (двоичное И) с маской. Например, определение
сети с маской 255.255.255.0
и сетевым адресом 192.168.1.0
состоит из
IP-адресов в диапазоне от 192.168.1.0
до 192.168.1.255
включительно.
Префикс, маска сети и маска хоста
Существует несколько эквивалентных способов указания сетевых IP масок.
Префикс /<nbits>
— это нотация, обозначающая, сколько старших битов установлено в
сетевой маске. Сетевая маска — это IP-адрес с некоторым количеством установленных
старших битов. Таким образом, префикс /24
эквивалентен сетевой маске
255.255.255.0
в IPv4 или ffff:ff00::
в IPv6. Кроме того, маска хоста
является логической инверсией сетевой маски и иногда используется (например, в
списках управления доступом Cisco) для обозначения сетевой маски. Маска хоста,
эквивалентная /24
в IPv4, — 0.0.0.255
.
Сетевые объекты
Все атрибуты, реализованные адресными объектами, реализуются и сетевыми
объектами. Кроме того, сетевые объекты реализуют дополнительные атрибуты. Все
они являются общими для IPv4Network
и IPv6Network
, поэтому во
избежание дублирования они задокументированы только для IPv4Network
.
Сетевые объекты хэшируемы, поэтому их можно использовать в
качестве ключей в словарях.
-
class
ipaddress.
IPv4Network
(address, strict=True) Создать определение сети IPv4. address может быть одним из следующих:
Строка, состоящая из IP-адреса и необязательной маски, разделённых косой чертой (
/
). IP-адрес — это сетевой адрес, а маска может быть либо одним числом, что означает префикс, либо строковым представлением адреса IPv4. Если это последнее, маска интерпретируется как маска сети, если она начинается с ненулевого поля, или как маска хоста, если она начинается с нулевого поля, за единственным исключением маски со всеми нулями, которая обрабатывается как сетевая маска. Если маска не указана, считается, что это/32
.Например, следующие address спецификации эквивалентны:
192.168.1.0/24
,192.168.1.0/255.255.255.0
и192.168.1.0/0.0.0.255
.Целое число, умещающееся в 32 бита. Это эквивалентно одноадресной сети с сетевым адресом address и маской
/32
.Целое число, упакованное в объект
bytes
длины 4 с прямым порядком байтов. Интерпретация аналогична целому числу address.Два кортежа из описания адреса и сетевой маски, где описание адреса представляет собой строку, 32-битное целое число, 4-байтовое упакованное целое число или существующий объект IPv4Address; а сетевая маска представляет собой либо целое число, представляющее длину префикса (например,
24
), либо строку, представляющую маску префикса (например,255.255.255.0
).
Вызывается
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
Строковое представление сети с маской в нотации сетевой маски.
-
with_hostmask
Строковое представление сети с маской в виде маски хоста.
-
num_addresses
Общее количество адресов в сети.
-
prefixlen
Длина сетевого префикса в битах.
-
hosts
() Возвращает итератор доступных для использования хостов в сети. Используемые хосты — это все IP-адреса, принадлежащие сети, за исключением самого сетевого адреса и сетевого широковещательного адреса. Для сетей с длиной маски 31 в результат также включаются сетевой адрес и сетевой широковещательный адрес.
>>> list(ip_network('192.0.2.0/29').hosts()) #doctest: +NORMALIZE_WHITESPACE [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')]
-
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)) #doctest: +NORMALIZE_WHITESPACE [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)) #doctest: +NORMALIZE_WHITESPACE [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)) #doctest: +NORMALIZE_WHITESPACE [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
-
supernet
(prefixlen_diff=1, new_prefix=None) Суперсеть, содержащая это определение сети, в зависимости от значений аргументов. prefixlen_diff — это величина, на которую должна быть уменьшена длина нашего префикса. new_prefix — желаемый новый префикс суперсети; он должен быть меньше нашего префикса. Должен быть установлен один и только один из prefixlen_diff и new_prefix. Возвращает один сетевой объект.
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
-
subnet_of
(other) Возвращает
True
, если сеть является подсетью other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) True
Добавлено в версии 3.7.
-
supernet_of
(other) Возвращает
True
, если сеть является суперсетью other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) True
Добавлено в версии 3.7.
-
compare_networks
(other) Сравнить эту сеть с other. В этом сравнении учитываются только сетевые адреса; биты хоста — нет. Возвращает
-1
,0
или1
.>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0
Не рекомендуется, начиная с версии 3.7: Он использует тот же алгоритм упорядочивания и сравнения, что и «<», «==» и «>»
-
class
ipaddress.
IPv6Network
(address, strict=True) Создать определение сети IPv6. address может быть одним из следующих:
Строка, состоящая из IP-адреса и необязательной длины префикса, разделенных косой чертой (
/
). IP-адрес — это сетевой адрес, а длина префикса должна быть одним числом префикса. Если длина префикса не указана, считается, что она равна/128
.Обратите внимание, что в настоящее время расширенные маски сети не поддерживаются. Это означает, что
2001:db00::0/24
является допустимым аргументом, а2001:db00::0/ffff:ff00::
— нет.Целое число, умещающееся в 128 бит. Это эквивалентно одноадресной сети с сетевым адресом address и маской
/128
.Целое число, упакованное в объект
bytes
длины 16 с обратным порядком байтов. Интерпретация аналогична целому числу address.Два кортежа из описания адреса и маски подсети, где описание адреса представляет собой строку, 128-битное целое число, 16-битное упакованное целое число или существующий объект IPv6Address; а сетевая маска представляет собой целое число, представляющее длину префикса.
Вызывается
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-адреса, принадлежащие сети, за исключением произвольного адреса подсети-маршрутизатора. Для сетей с длиной маски 127 адрес произвольной рассылки подсети-маршрутизатора также включается в результат.
-
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 с 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
Объекты Interface
Объекты Interface хэшируемы, поэтому их можно использовать в качестве ключей в словарях.
-
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
.
-
Операторы
Объекты Interface поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).
Логические операторы
Объекты Interface можно сравнить с обычным набором логических операторов.
Для сравнения на равенство (==
и !=
) и 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-адресов. 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) Возвращает ключ, подходящий для сортировки между сетями и адресами. Адресные и сетевые объекты по умолчанию не подлежат сортировке; они принципиально разные, поэтому выражение:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
не имеет смысла. Однако в некоторых случаях вам может понадобиться сортировка
ipaddress
в любом случае. Если вам нужно это сделать, вы можете использовать эту функцию в качестве аргумента key дляsorted()
.obj — это объект сети или адреса.
Пользовательские исключения
Для поддержки более подробных отчётов об ошибках из конструкторов классов модуль определяет следующие исключения:
-
exception
ipaddress.
AddressValueError
(ValueError) Любая ошибка значения, связанная с адресом.
-
exception
ipaddress.
NetmaskValueError
(ValueError) Любая ошибка значения, связанная с сетевой маской.