ipaddress — IPv4/IPv6 manipulation library

Вихідний код: 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 виникає, якщо адреса не є дійсною адресою IPv4 або IPv6.

>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:db8::')
IPv6Address('2001:db8::')
ipaddress.ip_network(address, strict=True)

Повертає об’єкт IPv4Network або IPv6Network залежно від IP-адреси, переданої як аргумент. адреса — це рядок або ціле число, що представляє IP-мережу. Можуть надаватися мережі IPv4 або IPv6; цілі числа, менші за 2**32, за умовчанням вважатимуться IPv4. strict передається конструктору IPv4Network або IPv6Network. Помилка ValueError виникає, якщо адреса не представляє дійсну адресу IPv4 або IPv6 або якщо мережа має встановлені біти хоста.

>>> ipaddress.ip_network('192.168.0.0/28')
IPv4Network('192.168.0.0/28')
ipaddress.ip_interface(address)

Повертає об’єкт IPv4Interface або IPv6Interface залежно від IP-адреси, переданої як аргумент. адреса — це рядок або ціле число, що представляє IP-адресу. Можна надати адреси IPv4 або IPv6; цілі числа, менші за 2**32, за умовчанням вважатимуться IPv4. Помилка ValueError виникає, якщо адреса не є дійсною адресою IPv4 або IPv6.

Одним із недоліків цих зручних функцій є те, що потреба в обробці форматів IPv4 і IPv6 означає, що повідомлення про помилки надають мінімальну інформацію про точну помилку, оскільки функції не знають, який формат був передбачуваний: IPv4 чи IPv6. Більш детальні звіти про помилки можна отримати, викликавши відповідні конструктори класів, що стосуються конкретної версії.

IP-адреси

Об’єкти адреси

Об’єкти IPv4Address і IPv6Address мають багато спільних атрибутів. Деякі атрибути, які мають значення лише для адрес IPv6, також реалізовані об’єктами IPv4Address, щоб полегшити написання коду, який правильно обробляє обидві версії IP. Адресні об’єкти hashable, тому їх можна використовувати як ключі в словниках.

class ipaddress.IPv4Address(address)

Створіть адресу IPv4. Помилка AddressValueError виникає, якщо адреса не є дійсною адресою IPv4.

Нижче наведено дійсну адресу IPv4:

  1. Рядок у десятковій точковій нотації, що складається з чотирьох цілих десяткових чисел у діапазоні від 0 до 255, розділених крапками (наприклад, 192.168.0.1). Кожне ціле число представляє октет (байт) в адресі. Початкові нулі не допускаються, щоб уникнути плутанини з вісімковою системою запису.

  2. Ціле число, яке вміщується в 32 біти.

  3. Ціле число, упаковане в об’єкт bytes довжиною 4 (старший октет спочатку).

>>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3232235521)
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
IPv4Address('192.168.0.1')

Змінено в версії 3.8: Початкові нулі допускаються, навіть у неоднозначних випадках, які виглядають як вісімкове позначення.

Змінено в версії 3.9.5: Початкові нулі більше не допускаються та розглядаються як помилка. Рядки адреси IPv4 тепер аналізуються так само строго, як glibc inet_pton().

version

Відповідний номер версії: 4 для IPv4, 6 для IPv6.

max_prefixlen

Загальна кількість бітів у поданні адреси для цієї версії: 32 для IPv4, 128 для IPv6.

Префікс визначає кількість початкових бітів в адресі, які порівнюються, щоб визначити, чи є адреса частиною мережі.

compressed
exploded

Представлення рядка в десятковій нотації з розділеними крапками. Початкові нулі ніколи не включаються в представлення.

Оскільки IPv4 не визначає скороченого позначення для адрес з нульовими октетами, ці два атрибути завжди збігаються з str(addr) для адрес IPv4. Розкриття цих атрибутів полегшує написання коду відображення, який може обробляти адреси IPv4 і IPv6.

packed

Двійкове представлення цієї адреси – об’єкт bytes відповідної довжини (старший октет першим). Це 4 байти для IPv4 і 16 байтів для IPv6.

reverse_pointer

Ім’я зворотного запису 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 if the address is defined as not globally reachable by iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry (for IPv6) with the following exceptions:

  • is_private is False for the shared address space (100.64.0.0/10)

  • For IPv4-mapped IPv6-addresses the is_private value is determined by the semantics of the underlying IPv4 addresses and the following condition holds (see IPv6Address.ipv4_mapped):

    address.is_private == address.ipv4_mapped.is_private
    

is_private has value opposite to is_global, except for the shared address space (100.64.0.0/10 range) where they are both False.

Змінено в версії 3.11.10: Fixed some false positives and false negatives.

  • 192.0.0.0/24 is considered private with the exception of 192.0.0.9/32 and 192.0.0.10/32 (previously: only the 192.0.0.0/29 sub-range was considered private).

  • 64:ff9b:1::/48 is considered private.

  • 2002::/16 is considered private.

  • There are exceptions within 2001::/23 (otherwise considered private): 2001:1::1/128, 2001:1::2/128, 2001:3::/32, 2001:4:112::/48, 2001:20::/28, 2001:30::/28. The exceptions are not considered private.

is_global

True if the address is defined as globally reachable by iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry (for IPv6) with the following exception:

For IPv4-mapped IPv6-addresses the is_private value is determined by the semantics of the underlying IPv4 addresses and the following condition holds (see IPv6Address.ipv4_mapped):

address.is_global == address.ipv4_mapped.is_global

is_global has value opposite to is_private, except for the shared address space (100.64.0.0/10 range) where they are both False.

Нове в версії 3.4.

Змінено в версії 3.11.10: Fixed some false positives and false negatives, see is_private for details.

is_unspecified

True, якщо адреса не вказана. Див. RFC 5735 (для IPv4) або RFC 2373 (для IPv6).

is_reserved

True, якщо інакше адреса зарезервована IETF.

is_loopback

True, якщо це петлева адреса. Див. RFC 3330 (для IPv4) або RFC 2373 (для IPv6).

True, якщо адреса зарезервована для локального використання посилання. Див. RFC 3927.

IPv4Address.__format__(fmt)

Повертає рядкове представлення IP-адреси, кероване рядком явного формату. fmt може бути одним із таких: 's', параметр за замовчуванням, еквівалентний str(), 'b' для двійкового рядка з доповненням нуля, 'X ' або 'x' для шістнадцяткового представлення у верхньому чи нижньому регістрі, або 'n', що еквівалентно 'b' для адрес IPv4 і 'x' для IPv6. Для двійкових і шістнадцяткових представлень доступні специфікатор форми '#' і опція групування '_'. __format__ використовується format, str.format і f-рядками.

>>> format(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
'0b11000000101010000000000000000001'
>>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
'2001:db8::1000'
>>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
'2001_0DB8_0000_0000_0000_0000_0000_1000'
>>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
'0x2001_0db8_0000_0000_0000_0000_0000_1000'

Нове в версії 3.9.

class ipaddress.IPv6Address(address)

Створіть адресу IPv6. Помилка AddressValueError виникає, якщо адреса не є дійсною адресою IPv6.

Нижче наведено дійсну адресу IPv6:

  1. Рядок, що складається з восьми груп по чотири шістнадцяткові цифри, кожна група представляє 16 біт. Групи розділені двокрапками. Це описує розгорнуту (довгу) нотацію. Рядок також можна стиснути (скорочений запис) різними способами. Докладніше див. RFC 4291. Наприклад, "0000:0000:0000:0000:0000:0abc:0007:0def" можна стиснути до "::abc:7:def".

    За бажанням рядок може також мати ідентифікатор зони видимості, виражений суфіксом %scope_id. Якщо присутній, ідентифікатор області має бути непорожнім і не може містити «%». Докладніше див. RFC 4007. Наприклад, fe80::1234%1 може ідентифікувати адресу fe80::1234 на першому посиланні вузла.

  2. Ціле число, яке вміщується в 128 біт.

  3. Ціле число, упаковане в об’єкт bytes довжиною 16, старший порядок байтів.

>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address('ff02::5678%1')
IPv6Address('ff02::5678%1')
compressed

Коротка форма подання адреси з опущеними початковими нулями в групах і найдовшою послідовністю груп, що повністю складається з нулів, згорнута до однієї порожньої групи.

Це також значення, яке повертає str(addr) для адрес IPv6.

exploded

Довга форма подання адреси з усіма початковими нулями та групами, що повністю складаються з нулів.

Щоб дізнатися про такі атрибути та методи, перегляньте відповідну документацію класу IPv4Address:

packed
reverse_pointer
version
max_prefixlen
is_multicast
is_private
is_global
is_unspecified
is_reserved
is_loopback

Нове в версії 3.4: is_global

is_site_local

True, якщо адреса зарезервована для локального використання сайту. Зауважте, що RFC 3879 заборонив локальний адресний простір сайту. Використовуйте is_private, щоб перевірити, чи ця адреса входить до простору унікальних локальних адрес, як визначено RFC 4193.

ipv4_mapped

Для адрес, які виглядають як зіставлені адреси IPv4 (починаючи з ::FFFF/96), ця властивість повідомить про вбудовану адресу IPv4. Для будь-якої іншої адреси ця властивість матиме значення None.

scope_id

Для адрес із областю видимості, як визначено RFC 4007, ця властивість визначає конкретну зону області дії адреси, до якої належить адреса, як рядок. Якщо зона видимості не вказана, ця властивість матиме значення None.

sixtofour

Для адрес, які виглядають як адреси 6to4 (починаючи з 2002::/16), як визначено RFC 3056, ця властивість повідомить про вбудовану адресу IPv4. Для будь-якої іншої адреси ця властивість матиме значення None.

teredo

Для адрес, які виглядають як адреси Teredo (починаючи з 2001::/32), як визначено RFC 4380, ця властивість повідомить про вбудовану пару IP-адрес (сервер, клієнт). Для будь-якої іншої адреси ця властивість матиме значення None.

IPv6Address.__format__(fmt)

Зверніться до документації відповідного методу в IPv4Address.

Нове в версії 3.9.

Перетворення на рядки та цілі числа

Для взаємодії з мережевими інтерфейсами, такими як модуль сокета, адреси повинні бути перетворені в рядки або цілі числа. Це обробляється за допомогою вбудованих функцій str() і int():

>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1

Зауважте, що IPv6-адреси перетворюються на цілі числа без ідентифікатора зони.

Оператори

Об’єкти адреси підтримують деякі оператори. Якщо не зазначено інше, оператори можна застосовувати лише між сумісними об’єктами (наприклад, IPv4 з IPv4, IPv6 з 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
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True

Арифметичні оператори

Цілі числа можна додавати або віднімати від об’єктів адреси. Деякі приклади:

>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address

Визначення мережі IP

Об’єкти IPv4Network і IPv6Network забезпечують механізм для визначення та перевірки визначень IP-мереж. Визначення мережі складається з маски та мережевої адреси, і, таким чином, визначає діапазон IP-адрес, які дорівнюють мережевій адресі, коли вона маскована (двійкове І) з маскою. Наприклад, визначення мережі з маскою 255.255.255.0 і мережевою адресою 192.168.1.0 складається з IP-адрес у включному діапазоні 192.168.1.0 до 192.168.1.255 .

Префікс, маска мережі та маска хоста

Існує кілька еквівалентних способів вказати мережеві маски IP. Префікс / <nbits> — це позначення, яке вказує, скільки старших бітів встановлено в масці мережі. Мережева маска — це IP-адреса з певною кількістю встановлених старших бітів. Таким чином, префікс /24 еквівалентний масці мережі 255.255.255.0 в IPv4 або ffff:ff00:: в IPv6. Крім того, маска хоста є логічною протилежністю мережевої маски та іноді використовується (наприклад, у списках контролю доступу Cisco) для позначення маски мережі. Маска хоста, еквівалентна /24 в IPv4, є 0.0.0.255.

Об’єкти мережі

Усі атрибути, реалізовані об’єктами адреси, також реалізуються об’єктами мережі. Крім того, об’єкти мережі реалізують додаткові атрибути. Усі вони є спільними для IPv4Network та IPv6Network, тому, щоб уникнути дублювання, вони задокументовані лише для IPv4Network. Мережеві об’єкти hashable, тому їх можна використовувати як ключі в словниках.

class ipaddress.IPv4Network(address, strict=True)

Створіть визначення мережі IPv4. адреса може бути однією з наступних:

  1. Рядок, що складається з IP-адреси та додаткової маски, розділених скісною рискою (/). IP-адреса – це мережева адреса, а маска може бути або одним числом, що означає, що це префікс, або рядковим представленням адреси IPv4. Якщо це останнє, маска інтерпретується як маска мережі, якщо вона починається з ненульового поля, або як маска хоста, якщо вона починається з нульового поля, за винятком маски з усіма нулями який розглядається як мережева маска. Якщо маска не вказана, вона вважається /32.

    Наприклад, такі специфікації адреси є еквівалентними: 192.168.1.0/24, 192.168.1.0/255.255.255.0 та 192.168.1.0/0.0.0.255.

  2. Ціле число, яке вміщується в 32 біти. Це еквівалентно одноадресній мережі, де мережна адреса — address, а маска — /32.

  3. Ціле число, упаковане в об’єкт bytes довжиною 4, старший порядок. Інтерпретація подібна до цілої адреси.

  4. Два кортежу з опису адреси та маски мережі, де опис адреси є або рядком, 32-бітним цілим числом, 4-байтовим упакованим цілим числом або існуючим об’єктом IPv4Address; а маска мережі є або цілим числом, що представляє довжину префікса (наприклад, 24), або рядком, що представляє маску префікса (наприклад, 255.255.255.0).

Помилка AddressValueError виникає, якщо адреса не є дійсною адресою IPv4. Помилка NetmaskValueError виникає, якщо маска недійсна для адреси IPv4.

Якщо strict має значення True і біти хоста встановлені в наданій адресі, тоді виникає ValueError. В іншому випадку біти хоста маскуються, щоб визначити відповідну мережеву адресу.

Якщо не вказано інше, усі мережеві методи, які приймають інші об’єкти мережі/адреси, викличуть TypeError, якщо IP-версія аргументу несумісна з self.

Змінено в версії 3.5: Додано форму двох кортежів для параметра конструктора адреса.

version
max_prefixlen

Зверніться до відповідної документації атрибутів у IPv4Address.

is_multicast
is_private
is_unspecified
is_reserved
is_loopback

Ці атрибути дійсні для мережі в цілому, якщо вони справедливі як для адреси мережі, так і для широкомовної адреси.

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)

Правда, якщо ця мережа частково або повністю міститься в other або other повністю міститься в цій мережі.

address_exclude(network)

Обчислює визначення мережі в результаті видалення даної мережі з цієї. Повертає ітератор мережевих об’єктів. Викликає ValueError, якщо мережа не повністю міститься в цій мережі.

>>> n1 = ip_network('192.0.2.0/28')
>>> n2 = ip_network('192.0.2.1/32')
>>> list(n1.address_exclude(n2))  
[IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
 IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
subnets(prefixlen_diff=1, new_prefix=None)

Підмережі, які об’єднуються для створення поточного визначення мережі, залежно від значень аргументів. prefixlen_diff — це величина, на яку має бути збільшена довжина нашого префікса. new_prefix — бажаний новий префікс підмереж; він повинен бути більшим за наш префікс. Має бути встановлено один і тільки один з prefixlen_diff і new_prefix. Повертає ітератор мережевих об’єктів.

>>> list(ip_network('192.0.2.0/24').subnets())
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
>>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))  
[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))  
[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    raise ValueError('new prefix must be longer')
ValueError: new prefix must be longer
>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))
[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
supernet(prefixlen_diff=1, new_prefix=None)

Супермережа, що містить це визначення мережі, залежно від значень аргументів. prefixlen_diff — це величина, на яку має бути зменшена довжина нашого префікса. new_prefix — бажаний новий префікс супермережі; він повинен бути меншим за наш префікс. Має бути встановлено один і тільки один з prefixlen_diff і new_prefix. Повертає єдиний мережевий об’єкт.

>>> ip_network('192.0.2.0/24').supernet()
IPv4Network('192.0.2.0/23')
>>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)
IPv4Network('192.0.0.0/22')
>>> ip_network('192.0.2.0/24').supernet(new_prefix=20)
IPv4Network('192.0.0.0/20')
subnet_of(other)

Повертає True, якщо ця мережа є підмережею other.

>>> a = ip_network('192.168.1.0/24')
>>> b = ip_network('192.168.1.128/30')
>>> b.subnet_of(a)
True

Нове в версії 3.7.

supernet_of(other)

Повертає True, якщо ця мережа є супермережею other.

>>> a = ip_network('192.168.1.0/24')
>>> b = ip_network('192.168.1.128/30')
>>> a.supernet_of(b)
True

Нове в версії 3.7.

compare_networks(other)

Порівняйте цю мережу з іншою. У цьому порівнянні розглядаються лише мережеві адреси; біти хоста не є. Повертає -1, 0 або 1.

>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))
-1
>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))
1
>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))
0

Застаріло починаючи з версії 3.7: Він використовує той самий алгоритм упорядкування та порівняння, що й « <», «==», and «> «

class ipaddress.IPv6Network(address, strict=True)

Створіть визначення мережі IPv6. адреса може бути однією з наступних:

  1. Рядок, що складається з IP-адреси та додаткової довжини префікса, розділених похилою рискою (/). IP-адреса – це мережева адреса, а довжина префікса має бути одним числом, префіксом. Якщо довжина префікса не вказана, він вважається /128.

    Зауважте, що наразі розширені маски мережі не підтримуються. Це означає, що 2001:db00::0/24 є дійсним аргументом, а 2001:db00::0/ffff:ff00:: ні.

  2. Ціле число, яке вміщується в 128 біт. Це еквівалентно одноадресній мережі, де мережна адреса — address, а маска — /128.

  3. Ціле число, упаковане в об’єкт bytes довжиною 16, старший порядок байтів. Інтерпретація подібна до цілої адреси.

  4. Два кортежу з опису адреси та маски мережі, де опис адреси є або рядком, 128-бітним цілим числом, 16-байтовим упакованим цілим числом або існуючим об’єктом IPv6Address; і маска мережі є цілим числом, що представляє довжину префікса.

Помилка AddressValueError виникає, якщо адреса не є дійсною адресою IPv6. Помилка NetmaskValueError виникає, якщо маска недійсна для адреси IPv6.

Якщо strict має значення True і біти хоста встановлені в наданій адресі, тоді виникає ValueError. В іншому випадку біти хоста маскуються, щоб визначити відповідну мережеву адресу.

Змінено в версії 3.5: Додано форму двох кортежів для параметра конструктора адреса.

version
max_prefixlen
is_multicast
is_private
is_unspecified
is_reserved
is_loopback
network_address
broadcast_address
hostmask
netmask
with_prefixlen
compressed
exploded
with_netmask
with_hostmask
num_addresses
prefixlen
hosts()

Повертає ітератор для придатних для використання хостів у мережі. Використовувані хости — це всі IP-адреси, які належать до мережі, за винятком будь-адреси маршрутизатора підмережі. Для мереж із довжиною маски 127 у результат також включено будь-яку адресу підмережного маршрутизатора. Мережі з маскою 128 повертатимуть список, що містить одну адресу хоста.

overlaps(other)
address_exclude(network)
subnets(prefixlen_diff=1, new_prefix=None)
supernet(prefixlen_diff=1, new_prefix=None)
subnet_of(other)
supernet_of(other)
compare_networks(other)

Зверніться до відповідної документації атрибутів у IPv4Network.

is_site_local

Цей атрибут є істинним для мережі в цілому, якщо він є істинним як для адреси мережі, так і для широкомовної адреси.

Оператори

Мережні об’єкти підтримують деякі оператори. Якщо не зазначено інше, оператори можна застосовувати лише між сумісними об’єктами (наприклад, IPv4 з 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

Об’єкти інтерфейсу

Об’єкти інтерфейсу hashable, тому їх можна використовувати як ключі в словниках.

class ipaddress.IPv4Interface(address)

Побудуйте інтерфейс IPv4. Значення адреси таке ж, як і в конструкторі 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 упакованих байтів у мережевому порядку (від старшого до старшого). адреса — це ціле числове представлення 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 упакованих байтів у мережевому порядку (від старшого до старшого). адреса — це ціле числове представлення 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)

Return an iterator of the collapsed IPv4Network or IPv6Network objects. addresses is an iterator of IPv4Network or IPv6Network objects. A TypeError is raised if addresses contains mixed version objects.

>>> [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')

doesn’t make sense. There are some times however, where you may wish to have ipaddress sort these anyway. If you need to do this, you can use this function as the key argument to sorted().

obj — це об’єкт мережі або адреси.

Спеціальні винятки

Щоб підтримувати більш конкретні звіти про помилки від конструкторів класів, модуль визначає наступні винятки:

exception ipaddress.AddressValueError(ValueError)

Будь-яка помилка значення, пов’язана з адресою.

exception ipaddress.NetmaskValueError(ValueError)

Будь-яка помилка значення, пов’язана з маскою мережі.