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:
Рядок у десятковій точковій нотації, що складається з чотирьох цілих десяткових чисел у діапазоні від 0 до 255, розділених крапками (наприклад,
192.168.0.1
). Кожне ціле число представляє октет (байт) в адресі. Початкові нулі не допускаються, щоб уникнути плутанини з вісімковою системою запису.Ціле число, яке вміщується в 32 біти.
Ціле число, упаковане в об’єкт
bytes
довжиною 4 (старший октет спочатку).
>>> ipaddress.IPv4Address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(3232235521) IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1')
Змінено в версії 3.8: Початкові нулі допускаються, навіть у неоднозначних випадках, які виглядають як вісімкове позначення.
Змінено в версії 3.10: Початкові нулі більше не допускаються та розглядаються як помилка. Рядки адреси IPv4 тепер аналізуються так само строго, як glibc
inet_pton()
.Змінено в версії 3.9.5: The above change was also included in Python 3.9 starting with version 3.9.5.
Змінено в версії 3.8.12: The above change was also included in Python 3.8 starting with version 3.8.12.
-
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
isFalse
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 (seeIPv6Address.ipv4_mapped
):address.is_private == address.ipv4_mapped.is_private
is_private
has value opposite tois_global
, except for the shared address space (100.64.0.0/10
range) where they are bothFalse
.Змінено в версії 3.9.20: Fixed some false positives and false negatives.
192.0.0.0/24
is considered private with the exception of192.0.0.9/32
and192.0.0.10/32
(previously: only the192.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 (seeIPv6Address.ipv4_mapped
):address.is_global == address.ipv4_mapped.is_global
is_global
has value opposite tois_private
, except for the shared address space (100.64.0.0/10
range) where they are bothFalse
.Нове в версії 3.4.
Змінено в версії 3.9.20: Fixed some false positives and false negatives, see
is_private
for details.
-
is_reserved
¶ True
, якщо інакше адреса зарезервована IETF.
-
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:
Рядок, що складається з восьми груп по чотири шістнадцяткові цифри, кожна група представляє 16 біт. Групи розділені двокрапками. Це описує розгорнуту (довгу) нотацію. Рядок також можна стиснути (скорочений запис) різними способами. Докладніше див. RFC 4291. Наприклад,
"0000:0000:0000:0000:0000:0abc:0007:0def"
можна стиснути до"::abc:7:def"
.За бажанням рядок може також мати ідентифікатор зони видимості, виражений суфіксом
%scope_id
. Якщо присутній, ідентифікатор області має бути непорожнім і не може містити «%». Докладніше див. RFC 4007. Наприклад,fe80::1234%1
може ідентифікувати адресуfe80::1234
на першому посиланні вузла.Ціле число, яке вміщується в 128 біт.
Ціле число, упаковане в об’єкт
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
.
-
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. адреса може бути однією з наступних:
Рядок, що складається з 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
.Ціле число, яке вміщується в 32 біти. Це еквівалентно одноадресній мережі, де мережна адреса — address, а маска —
/32
.Ціле число, упаковане в об’єкт
bytes
довжиною 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. адреса може бути однією з наступних:
Рядок, що складається з IP-адреси та додаткової довжини префікса, розділених похилою рискою (
/
). IP-адреса – це мережева адреса, а довжина префікса має бути одним числом, префіксом. Якщо довжина префікса не вказана, він вважається/128
.Зауважте, що наразі розширені маски мережі не підтримуються. Це означає, що
2001:db00::0/24
є дійсним аргументом, а2001:db00::0/ffff:ff00::
ні.Ціле число, яке вміщується в 128 біт. Це еквівалентно одноадресній мережі, де мережна адреса — address, а маска —
/128
.Ціле число, упаковане в об’єкт
bytes
довжиною 16, старший порядок байтів. Інтерпретація подібна до цілої адреси.Два кортежу з опису адреси та маски мережі, де опис адреси є або рядком, 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
orIPv6Network
objects. addresses is an iterator ofIPv4Network
orIPv6Network
objects. ATypeError
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 tosorted()
.obj — це об’єкт мережі або адреси.
Спеціальні винятки¶
Щоб підтримувати більш конкретні звіти про помилки від конструкторів класів, модуль визначає наступні винятки:
-
exception
ipaddress.
AddressValueError
(ValueError)¶ Будь-яка помилка значення, пов’язана з адресою.
-
exception
ipaddress.
NetmaskValueError
(ValueError)¶ Будь-яка помилка значення, пов’язана з маскою мережі.