# `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).

  is_link_local

    `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
  is_link_local

    Нове в версії 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
  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)

    `Правда`, якщо ця мережа частково або повністю міститься в 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
  is_link_local
  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)

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