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.8.12: Ведущие нули больше не допускаются и обрабатываются как ошибка. Строки 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соответствующей длины (самый значимый октет вначале). Для 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 включительно, разделённых точками (например,
-
class ipaddress.IPv6Address(address) -
Создаёт адрес IPv6. Если адрес не является корректным адресом IPv6, возникает исключение
AddressValueError.Следующее является корректным адресом IPv6:
- Строка, состоящая из восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит. Группы разделены двоеточиями. Это описание развёрнутой (полной) записи. Строка также может быть скомпрессирована (сокращённая запись) различными способами. Подробности см. в RFC 4291. Например,
"0000:0000:0000:0000:0000:0abc:0007:0def"может быть сжато до"::abc:7:def". - Целое число, которое помещается в 128 бит.
- Целое число, упакованное в объект
bytesдлиной 16 байт, в формате big-endian.
>>> 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, сопоставленными с IPv6 (начинающимися с
::FFFF/96), этот атрибут вернёт вложенный адрес IPv4. Для любого другого адреса этот атрибут будетNone.
-
sixtofour -
Для адресов, которые, по-видимому, являются адресами 6to4 (начинающимися с
2002::/16) согласно RFC 3056, этот атрибут вернёт вложенный адрес IPv4. Для любого другого адреса этот атрибут будетNone.
-
teredo -
Для адресов, которые, по-видимому, являются адресами Teredo (начинающимися с
2001::/32) согласно RFC 4380, этот атрибут вернёт вложенную пару адресов(server, client)IP. Для любого другого адреса этот атрибут будетNone.
- Строка, состоящая из восьми групп по четыре шестнадцатеричных цифры, каждая группа представляет 16 бит. Группы разделены двоеточиями. Это описание развёрнутой (полной) записи. Строка также может быть скомпрессирована (сокращённая запись) различными способами. Подробности см. в RFC 4291. Например,
Преобразование в строки и целые числа
Для взаимодействия с сетевыми интерфейсами, такими как модуль сокетов, адреса необходимо преобразовать в строки или целые числа. Это выполняется с помощью встроенных функций 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, big-endian. Интерпретация аналогична целому числу 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, адрес сети и адрес широковещательной передачи сети также включены в результат. Сети с маской 32 вернут список, содержащий единственный адрес хоста.
>>> list(ip_network('192.0.2.0/29').hosts()) [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] >>> list(ip_network('192.0.2.0/31').hosts()) [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] >>> list(ip_network('192.0.2.1/32').hosts()) [IPv4Address('192.0.2.1')]
-
overlaps(other) -
Trueесли эта сеть частично или полностью содержится в other или other полностью содержится в этой сети.
-
address_exclude(network) -
Вычисляет определения сетей, полученные в результате удаления заданной сети из данной. Возвращает итератор объектов сети. Генерирует
ValueError, если network не полностью содержится в данной сети.>>> n1 = ip_network('192.0.2.0/28') >>> n2 = ip_network('192.0.2.1/32') >>> list(n1.address_exclude(n2)) [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
-
subnets(prefixlen_diff=1, new_prefix=None) -
Подсети, которые объединяются, чтобы сформировать текущее определение сети, в зависимости от значений аргументов. prefixlen_diff — это величина, на которую должна быть увеличена длина нашего префикса. new_prefix — это желаемый новый префикс подсетей; он должен быть больше нашего префикса. Только один из prefixlen_diff и new_prefix должен быть задан. Возвращает итератор объектов сети.
>>> list(ip_network('192.0.2.0/24').subnets()) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
-
supernet(prefixlen_diff=1, new_prefix=None) -
Суперсеть, содержащая это определение сети, в зависимости от значений аргументов. prefixlen_diff — это величина, на которую должна быть уменьшена длина нашего префикса. new_prefix — это желаемый новый префикс суперсети; он должен быть меньше нашего префикса. Только один из prefixlen_diff и new_prefix должен быть задан. Возвращает единственный объект сети.
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
-
subnet_of(other) -
Возвращает
Trueесли эта сеть является подсетью other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) TrueНовое в версии 3.7.
-
supernet_of(other) -
Возвращает
Trueесли эта сеть является суперсетью other.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) TrueНовое в версии 3.7.
-
compare_networks(other) -
Сравните эту сеть с other. При этом сравнении учитываются только адреса сети; биты хоста не учитываются. Возвращает либо
-1, либо0, либо1.>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0Устарело начиная с версии 3.7: Использует тот же алгоритм сортировки и сравнения, что и “<”, “==”, и “>”
-
-
class ipaddress.IPv6Network(address, strict=True) -
Создайте определение сети IPv6. address может быть одним из следующих:
-
Строка, состоящая из IP-адреса и необязательной длины префикса, разделённых слэшем (
/). IP-адрес — это адрес сети, а длина префикса должна быть одним числом, prefix. Если длина префикса не указана, она считается/128.Обратите внимание, что в настоящее время расширенные маски подсети не поддерживаются. Это означает, что
2001:db00::0/24является допустимым аргументом, а2001:db00::0/ffff:ff00::— нет. - Целое число, которое помещается в 128 битов. Это эквивалентно сети с одним адресом, где адрес сети — address, а маска —
/128. - Целое число, упакованное в объект
bytesдлиной 16 байт, в формате big-endian. Интерпретация аналогична целому числу address. - Двухэлементный кортеж из описания адреса и маски подсети, где описание адреса — это строка, 128-битовое целое число, 16-байтовое упакованное целое число или существующий объект IPv6Address; а маска подсети — целое число, представляющее длину префикса.
Если address не является допустимым IPv6-адресом, генерируется исключение
AddressValueError. Если маска не является допустимой для IPv6-адреса, генерируется исключениеNetmaskValueError.Если strict —
Trueи в предоставленном адресе установлены биты хоста, генерируется исключениеValueError. В противном случае биты хоста маскируются для определения соответствующего адреса сети.Изменено в версии 3.5: Добавлен двухэлементный кортеж для параметра конструктора address.
-
version
-
max_prefixlen
-
is_multicast
-
is_private
-
is_unspecified
-
is_reserved
-
is_loopback
-
is_link_local
-
network_address
-
broadcast_address
-
hostmask
-
netmask
-
with_prefixlen
-
compressed
-
exploded
-
with_netmask
-
with_hostmask
-
num_addresses
-
prefixlen
-
hosts() -
Возвращает итератор по доступным хостам в сети. Доступные хосты — это все IP-адреса, принадлежащие сети, за исключением адреса anycast подсети-маршрутизатора. Для сетей с длиной маски 127 адрес anycast подсети-маршрутизатора также включается в результат. Сети с маской 128 вернут список, содержащий единственный адрес хоста.
-
overlaps(other)
-
address_exclude(network)
-
subnets(prefixlen_diff=1, new_prefix=None)
-
supernet(prefixlen_diff=1, new_prefix=None)
-
subnet_of(other)
-
supernet_of(other)
-
compare_networks(other) -
См. документацию соответствующего атрибута в
IPv4Network.
-
is_site_local -
Этот атрибут имеет значение true для всей сети, если он имеет значение true как для адреса сети, так и для адреса широковещательной рассылки.
-
Операторы
Объекты сети поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (т.е. IPv4 с IPv4, IPv6 с IPv6).
Логические операторы
Объекты сети могут сравниваться с обычным набором логических операторов. Объекты сети упорядочиваются сначала по адресу сети, а затем по маске.
Итерация
Объекты сети могут итерироваться для перечисления всех адресов, принадлежащих сети. Для итерации возвращаются все хосты, включая недоступные (для доступных хостов используйте метод hosts()). Пример:
>>> for addr in IPv4Network('192.0.2.0/28'):
... addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')
Сети как контейнеры адресов
Объекты сети могут выступать в качестве контейнеров адресов. Примеры:
>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False
Объекты интерфейса
Объекты интерфейса являются хешируемыми, поэтому их можно использовать в качестве ключей в словарях.
-
class ipaddress.IPv4Interface(address) -
Создайте IPv4-интерфейс. Значение address такое же, как в конструкторе
IPv4Network, за исключением того, что произвольные адреса хостов всегда принимаются.IPv4Interfaceявляется подклассомIPv4Address, поэтому он наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:-
ip -
Адрес (
IPv4Address) без сетевой информации.>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5')
-
network -
Сеть (
IPv4Network), к которой принадлежит этот интерфейс.>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.network IPv4Network('192.0.2.0/24')
-
with_prefixlen -
Строковое представление интерфейса с маской в префиксной нотации.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_prefixlen '192.0.2.5/24'
-
with_netmask -
Строковое представление интерфейса с сетью как маской.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_netmask '192.0.2.5/255.255.255.0'
-
with_hostmask -
Строковое представление интерфейса с сетью как маской хоста.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_hostmask '192.0.2.5/0.0.0.255'
-
-
class ipaddress.IPv6Interface(address) -
Создайте IPv6-интерфейс. Значение address такое же, как в конструкторе
IPv6Network, за исключением того, что произвольные адреса хостов всегда принимаются.IPv6Interfaceявляется подклассомIPv6Address, поэтому он наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:-
ip
-
network
-
with_prefixlen
-
with_netmask
-
with_hostmask -
См. документацию соответствующего атрибута в
IPv4Interface.
-
Операторы
Объекты интерфейсов поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (т.е. IPv4 с IPv4, IPv6 с IPv6).
Логические операторы
Объекты интерфейса могут сравниваться с помощью обычного набора логических операторов.
Для сравнения на равенство (== и != ), IP-адрес и сеть должны быть одинаковыми для равенства объектов. Интерфейс не будет сравниваться как равный с объектом адреса или сети.
Для упорядочения (<, >, и т.д.) правила отличаются. Объекты интерфейса и адреса с одинаковой версией IP могут сравниваться, и объекты адреса всегда будут сортироваться раньше, чем объекты интерфейса. Два объекта интерфейса сначала сравниваются по их сетям, и если они одинаковые, то по их IP-адресам.
Другие функции уровня модуля
Модуль также предоставляет следующие функции уровня модуля:
-
ipaddress.v4_int_to_packed(address) -
Представить адрес как 4 упакованных байта в сетевом (big-endian) порядке. address — целое число, представляющее IPv4-адрес. Возникает
ValueError, если целое число отрицательное или слишком большое для 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-адрес. Возникает
ValueError, если целое число отрицательное или слишком большое для 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) -
Любая ошибка значения, связанная с маской сети.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/ipaddress.html