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 по умолчанию. Поднимается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 форматов означает, что сообщения об ошибках предоставляют минимальную информацию о точной ошибке, так как функции не знают, был ли предназначен формат IPv4 или IPv6. Более подробные отчеты об ошибках можно получить, непосредственно вызвав соответствующие конструкторы классов, зависящие от версии.
IP-адреса¶
Объекты адреса¶
Объекты IPv4Address
и IPv6Address
имеют много общих атрибуты. Некоторые
атрибуты, которые имеют значение только для адресов IPv6, также реализуются
объектами IPv4Address
, чтобы облегчить запись кода, который правильно
обрабатывает обе версии IP. Объекты адреса - хэшируемы, таким образом, они
могут быть используемый как ключами в словарях.
-
class
ipaddress.
IPv4Address
(address)¶ Создать адрес IPv4. Поднмается
AddressValueError
, если address недопустимый адрес IPv4.Ниже указан допустимый адрес IPv4:
- A строка в десятично-точечном представлении, состоящем из четырёх
десятичных целых чисел в инклюзивном диапазоне 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
¶ Имя обратной записи PTR DNS для IP-адреса, например,:
>>> ipaddress.ip_address("127.0.0.1").reverse_pointer '1.0.0.127.in-addr.arpa' >>> ipaddress.ip_address("2001:db8::1").reverse_pointer '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
Это имя, которое может быть используемый для выполнения поиска PTR, а не само разрешенное имя узла.
Добавлено в версии 3.5.
-
is_multicast
¶ True
если адрес зарезервирован для многоадресного использования. См. RFC 3171 (для IPv4) или RFC 2373 (для IPv6).
-
is_private
¶ True
, если адрес назначен для частных сетей. См. iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6).
-
is_global
¶ True
если адрес назначен для public сетей. См. iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6).Добавлено в версии 3.4.
-
is_reserved
¶ True
если адрес в противном случае зарезервирован IETF.
- A строка в десятично-точечном представлении, состоящем из четырёх
десятичных целых чисел в инклюзивном диапазоне 0 - 255, разделённых точками
(например,
-
class
ipaddress.
IPv6Address
(address)¶ Создать адрес IPv6. Поднимается
AddressValueError
, если address недопустимый адрес IPv6.Ниже указан допустимый адрес IPv6:
- Строка, состоящий из восьми групп по четыре шестнадцатеричных цифры,
каждая группа представляет 16 бит. Группы разделены двоеточием. Здесь
описывается нотация exploded (обыкновенное письмо). Строка также может быть
compressed (сокращенная нотация) различными средствами. Дополнительные сведения
см. в разделе 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
class:-
packed
¶
-
reverse_pointer
¶
-
version
¶
-
max_prefixlen
¶
-
is_multicast
¶
-
is_private
¶
-
is_global
¶
-
is_unspecified
¶
-
is_reserved
¶
-
is_loopback
¶
-
is_link_local
¶ Добавлено в версии 3.4: is_global
-
is_site_local
¶ True
если адрес зарезервирован для использования site-локальная. Обратите внимание, что адресное пространство сайта-локальная было запрещено RFC 3879. Используйтеis_private
, чтобы проверить, ли этот адрес в течение уникальных адресов локальная, как определено RFC 4193.
-
ipv4_mapped
¶ Для адресов, которые, кажется, IPv4, нанес на карту адреса (начинающийся с
::FFFF/96
), эта собственность сообщит о вложенном адресе IPv4. Для любого другого адреса это свойство будетNone
.
- Строка, состоящий из восьми групп по четыре шестнадцатеричных цифры,
каждая группа представляет 16 бит. Группы разделены двоеточием. Здесь
описывается нотация exploded (обыкновенное письмо). Строка также может быть
compressed (сокращенная нотация) различными средствами. Дополнительные сведения
см. в разделе RFC 4291. Например,
Преобразование в строки и целые числа¶
Для взаимодействия с сетевыми интерфейсами, такими как модуль soket, адреса
должны быть преобразованы в строки или целые числа. Это выполняется с
помощью функций построения 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. Если это последнее, маска интерпретируется как net mask, если она начинается с ненулевого поля, или как маска хоста, если она начинается с нулевого поля, за единственным исключением полностью нулевой маски, которая рассматривается как сетевая маска. Если маска не предоставляется, она считается/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 может быть одним из следующих:
1. Строка, состоящая из IP-адреса и дополнительной длины префикса, разделенной косой чертой (
/
). IP-адрес - это сетевой адрес, а длина префикса должна быть одним номером, то есть prefix. Если длина префикса не указана, он считается/128
.Обратите внимание, что в настоящее время расширенные маски сетей не поддерживаются. Это означает, что2001:db00::0/24
- действительный аргумент в то время как2001:db00::0/ffff:ff00::
нет.- Целое число, которое соответствует 128 битам. Это эквивалентно одноадресной
сети с сетевым адресом address и маской
/128
. - Целое число, упакованное в объект
bytes
длиной 16, big-endian. Интерпретация похожа на целое число address. - Двухкортежное описание адреса и маску сети, где описание адреса является либо строка, 128-битным целым числом, 16-байтовым упакованным целым числом или существующим объектом IPv6Address; и маска сети является целым числом, представляющим длину префикса.
AddressValueError
поднят, если address не действительный адрес IPv6.NetmaskValueError
поднят, если маска не действительна для адреса IPv6.Если strict является
True
и биты хоста установлены в предоставленном адресе, тоValueError
поднимается. В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.Изменено в версии 3.5: Добавленный форма с двумя кортежами для параметра конструктора address.
-
version
¶
-
max_prefixlen
¶
-
is_multicast
¶
-
is_private
¶
-
is_unspecified
¶
-
is_reserved
¶
-
is_loopback
¶
-
is_link_local
¶
-
network_address
¶
-
broadcast_address
¶
-
hostmask
¶
-
netmask
¶
-
with_prefixlen
¶
-
compressed
¶
-
exploded
¶
-
with_netmask
¶
-
with_hostmask
¶
-
num_addresses
¶
-
prefixlen
¶
-
hosts
()¶ Возвращает итератор по используемым узлам в сети. Пригодными для использования хостами являются все IP-адреса, принадлежащие сети, за исключением адреса anycast подсети-маршрутизатора. Для сетей с длиной маски 127 адрес anycast подсети-маршрутизатора также включается в результат.
-
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
¶ Эти атрибут верны для сети в целом, если это верно и для сетевого адреса и для широковещательного адреса.
- Целое число, которое соответствует 128 битам. Это эквивалентно одноадресной
сети с сетевым адресом address и маской
Операторы¶
Сетевые объекты поддерживают некоторых операторов. Если не указано иное, операторы могут применяться только между совместимыми объектами (т.е. 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 IP-адреса.
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 упакованных байтах в сетевом (big-endian) порядке. address представляет собой целое число IPv6 IP-адреса.
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)¶ Возвращает ключ, подходящий для сортировки между сетями и адресами. Объекты 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)¶ Любая ошибка значение, связанная с маской сети.