Скільки придатних для використання IP-адрес у 20-бітній підмережі

0 Comments

Скільки придатних для використання IP-адрес у 20-бітній підмережі

Підмережа відноситься до частини набору протоколів IP (мережі Інтернет-протоколів). IP-мережа — це група протоколів, що використовуються в Інтернеті. TCP/IP (Transmission Control Protocol/Internet Protocol) — найпоширеніша назва.

Як працює підмережа?

Підмережа відноситься до дії поділу мережі принаймні на дві різні мережі. Маршрутизатори – це пристрої, які дозволяють обмінюватися трафіком між підмережами, одночасно служачи фізичною межею. Хоча IPv4 залишається найпопулярнішою технологією мережевої адресації, популярність IPv6 зростає.

IP-адреса складається з номера маршрутизації (префікса) та ідентифікатора хоста (поле відпочинку). Поле відпочинку відноситься до ідентифікатора, який є унікальним для певного хоста або мережевого інтерфейсу. Безкласова міждоменна маршрутизація (CIDR) — це звичайний спосіб вираження префікса маршрутизації. Це працює як для IPv4, так і для IPv6. CIDR використовується для створення унікальних ідентифікаторів, які можна використовувати як для окремих пристроїв, так і для мереж. Маски підмережі також можливі для мереж IPv4. Ці маски підмережі іноді виражаються у вигляді десяткових точок, як показано в полі «Підмережа» калькулятора. Кожен хост у підмережі має однаковий номер мережі, а не ідентифікатор хоста, який є унікальним для кожної людини. Ці маски підмережі можна використовувати в IPv4, щоб розрізняти ідентифікатор хоста та номер мережі. Мережевий префікс IPv6 виконує подібну функцію до маски підмережі IPv4. Довжина префікса – це кількість бітів в адресі.

До впровадження CIDR префікси IPv4 можна було отримати безпосередньо з IP-адреси на основі класу (AB або C) адреси. Маска мережі також впливає на діапазон IP-адрес, які вона включає. Однак, щоб призначити адресу мережі, потрібно мати як адресу, так і маску.

Схема підмережі?

Нижче наведено таблицю з переліком типових підмереж, які використовує IPv4:

ipaddress — Бібліотека обробки IPv4/IPv6¶

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

Повертає об’єкт 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') 

Повертає об’єкт 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() .

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

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

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

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

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

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

Ім’я зворотного запису 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.

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

True , якщо адреса призначена для приватних мереж. Перегляньте iana-ipv4-special-registry (для IPv4) або iana-ipv6-special-registry (для IPv6).

True , якщо адреса призначена для загальнодоступних мереж. Перегляньте iana-ipv4-special-registry (для IPv4) або iana-ipv6-special-registry (для IPv6).

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

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

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

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' >>> ' '.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' >>> ''.format(ipaddress.IPv6Address('2001:db8::1000')) '0x2001_0db8_0000_0000_0000_0000_0000_1000' 

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

Створіть адресу 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') 

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

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

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

Щоб дізнатися про такі атрибути та методи, перегляньте відповідну документацію класу 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

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

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

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

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

Для адрес, які виглядають як адреси 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 "", line 1, in 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. Префікс / — це позначення, яке вказує, скільки старших бітів встановлено в масці мережі. Мережева маска — це 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: Додано форму двох кортежів для параметра конструктора адреса.

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

is_multicast ¶ is_private ¶ is_unspecified ¶ is_reserved ¶ is_loopback ¶ is_link_local ¶

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

Мережева адреса для мережі. Адреса мережі та довжина префікса разом однозначно визначають мережу.

Широкомовна адреса для мережі. Пакети, надіслані на широкомовну адресу, повинні бути отримані кожним хостом у мережі.

Маска хоста як об’єкт IPv4Address .

Маска мережі як об’єкт IPv4Address .

with_prefixlen ¶ compressed ¶ exploded ¶

Рядкове представлення мережі з маскою в нотації префікса.

with_prefixlen і compressed завжди однакові з str(network) . exploded використовує розчленовану форму мережевої адреси.

Рядкове представлення мережі з маскою в нотації маски мережі.

Рядкове представлення мережі з маскою в нотації маски хоста.

Загальна кількість адрес у мережі.

Довжина мережевого префікса в бітах.

Повертає ітератор для придатних для використання хостів у мережі. Використовувані хости — це всі 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')] 

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

Обчислює визначення мережі в результаті видалення даної мережі з цієї. Повертає ітератор мережевих об’єктів. Викликає 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')] 

Підмережі, які об’єднуються для створення поточного визначення мережі, залежно від значень аргументів. 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 "", line 1, in 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')] 

Супермережа, що містить це визначення мережі, залежно від значень аргументів. 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') 

Повертає 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.

Повертає 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.

Порівняйте цю мережу з іншою. У цьому порівнянні розглядаються лише мережеві адреси; біти хоста не є. Повертає -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: Він використовує той самий алгоритм упорядкування та порівняння, що й « «

Створіть визначення мережі 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 .

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

Оператори¶

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

Адреса ( IPv4Address ) без інформації про мережу.

>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5') 

Мережа ( IPv4Network ), до якої належить цей інтерфейс.

>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.network IPv4Network('192.0.2.0/24') 

Рядкове представлення інтерфейсу з маскою в префіксній нотації.

>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_prefixlen '192.0.2.5/24' 

Рядкове представлення інтерфейсу з мережею як мережевою маскою.

>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_netmask '192.0.2.5/255.255.255.0' 

Рядкове представлення інтерфейсу з мережею як маскою хоста.

>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_hostmask '192.0.2.5/0.0.0.255' 

Побудуйте інтерфейс 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' 

Представлення адреси у вигляді 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')] 

Повертає ітератор згорнутих об’єктів IPv4Network або IPv6Network . addresses є ітератором об’єктів IPv4Network або IPv6Network . Помилка 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')] 

Повертає ключ, придатний для сортування між мережами та адресами. Об’єкти «Адреса» та «Мережа» не можна сортувати за замовчуванням; вони принципово різні, тому вираз:

IPv4Address('192.0.2.0')  IPv4Network('192.0.2.0/24') 

не має сенсу. Однак іноді вам може знадобитися, щоб ipaddress все одно відсортував їх. Якщо вам потрібно це зробити, ви можете використовувати цю функцію як ключовий аргумент для sorted() .

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

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

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

exception ipaddress. AddressValueError ( ValueError ) ¶

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

exception ipaddress. NetmaskValueError ( ValueError ) ¶

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