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). Каждое целое число представляет октет (байт) в адресе. Ведущие нули допускаются только для значений меньше 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_loopback -
Trueесли это адрес петли обратной связи. См. RFC 3330 (для IPv4) или RFC 2373 (для IPv6).
-
is_link_local -
Trueесли адрес зарезервирован для локального использования в сети. См. RFC 3927.
- Строка в десятично-точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255, разделённых точками (например,
-
class ipaddress.IPv6Address(address) -
Создать адрес IPv6. Если address не является допустимым адресом 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).
Если address не является допустимым IPv4-адресом, генерируется исключение
AddressValueError. Если маска не является допустимой для IPv4-адреса, генерируется исключениеNetmaskValueError.Если strict равно
Trueи в предоставленном адресе установлены биты хоста, то генерируется исключениеValueError. В противном случае биты хоста маскируются для определения соответствующего адреса сети.Если не указано иное, все методы сети, принимающие другие объекты сети/адреса, будут генерировать исключение
TypeError, если версия IP аргумента несовместима сself.Изменено в версии 3.5: Добавлен двухэлементный кортеж в качестве параметра конструктора address.
-
version
-
max_prefixlen -
См. соответствующую документацию к атрибуту в
IPv4Address.
-
is_multicast
-
is_private
-
is_unspecified
-
is_reserved
-
is_loopback
-
is_link_local -
Эти атрибуты равны true для сети в целом, если они равны true как для адреса сети, так и для адреса широковещательной передачи.
-
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()) [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)) [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 подсети-маршрутизатора также включается в результат.
-
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-адресам.
Другие функции уровня модуля
Модуль также предоставляет следующие функции уровня модуля:
-
ipaddress.v4_int_to_packed(address) -
Представить адрес как 4 упакованных байта в сетевом (big-endian) порядке. address — это целочисленное представление IPv4-адреса. Если целое число отрицательное или слишком большое для IPv4-адреса, возникает ошибка
ValueError.>>> ipaddress.ip_address(3221225985) IPv4Address('192.0.2.1') >>> ipaddress.v4_int_to_packed(3221225985) b'\xc0\x00\x02\x01'
-
ipaddress.v6_int_to_packed(address) -
Представить адрес как 16 упакованных байтов в сетевом (big-endian) порядке. address — это целочисленное представление IPv6-адреса. Если целое число отрицательное или слишком большое для IPv6-адреса, возникает ошибка
ValueError.
-
ipaddress.summarize_address_range(first, last) -
Возвращает итератор с суммированным диапазоном сети, заданным начальным и конечным IP-адресами. first — первый
IPv4AddressилиIPv6Addressв диапазоне, а last — последнийIPv4AddressилиIPv6Addressв диапазоне. Если first или last не являются IP-адресами или имеют разную версию, возникает ошибкаTypeError. Если last не больше first или версия first-адреса не 4 или 6, возникает ошибкаValueError.>>> [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. Если addresses содержит объекты смешанных версий, возникает ошибкаTypeError.>>> [ipaddr for ipaddr in ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), ... ipaddress.IPv4Network('192.0.2.128/25')])] [IPv4Network('192.0.2.0/24')]
-
ipaddress.get_mixed_type_key(obj) -
Возвращает ключ, подходящий для сортировки между сетями и адресами. Объекты 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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/ipaddress.html