Документация Python неофициальный перевод

ipaddress.md

658 строк · 42.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.4/library/ipaddress.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 21.28. [`ipaddress`](https://python-all.ru/3.4/library/ipaddress.html#module-ipaddress) – библиотека для работы с IPv4/IPv689**Исходный код:** [Lib/ipaddress.py](https://python-all.ru/src/3.4/Lib/ipaddress.py)1011---1213[`ipaddress`](https://python-all.ru/3.4/library/ipaddress.html#module-ipaddress) предоставляет возможности для создания, изменения и работы с адресами и сетями IPv4 и IPv6.1415Функции и классы этого модуля упрощают выполнение различных задач, связанных с IP-адресами: проверку, находятся ли два хоста в одной подсети; перебор всех хостов в заданной подсети; проверку, является ли строка корректным IP-адресом или определением сети, и так далее.1617Это полная справочная информация по модулю API. Обзор и введение см. в [*Введение в модуль ipaddress*](https://python-all.ru/3.4/howto/ipaddress.html#ipaddress-howto).1819Новое в версии 3.3.2021## 21.28.1. Удобные фабричные функции2223Модуль [`ipaddress`](https://python-all.ru/3.4/library/ipaddress.html#module-ipaddress) предоставляет фабричные функции для удобного создания IP-адресов, сетей и интерфейсов:2425#### `ipaddress.ip_address(address)`2627Возвращает объект [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address) или [`IPv6Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Address) в зависимости от IP-адреса, переданного в качестве аргумента. Можно передавать как IPv4, так и IPv6 адреса; целые числа меньше 2\*\*32 по умолчанию считаются IPv4. Исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) выбрасывается, если *address* не представляет допустимый IPv4 или IPv6 адрес.2829```python30>>> ipaddress.ip_address('192.168.0.1')31IPv4Address('192.168.0.1')32>>> ipaddress.ip_address('2001:db8::')33IPv6Address('2001:db8::')34```3536#### `ipaddress.ip_network(address, strict=True)`3738Возвращает объект [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network) в зависимости от IP-адреса, переданного в качестве аргумента. *address* – это строка или целое число, представляющее IP-сеть. Можно передавать как IPv4, так и IPv6 сети; целые числа меньше 2\*\*32 по умолчанию считаются IPv4. *strict* передаётся в конструктор [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network). Исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) выбрасывается, если *address* не представляет допустимый IPv4 или IPv6 адрес, или если в сети установлены биты хоста.3940```python41>>> ipaddress.ip_network('192.168.0.0/28')42IPv4Network('192.168.0.0/28')43```4445#### `ipaddress.ip_interface(address)`4647Возвращает объект [`IPv4Interface`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Interface) или [`IPv6Interface`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Interface) в зависимости от IP-адреса, переданного в качестве аргумента. *address* – это строка или целое число, представляющее IP-адрес. Можно передавать как IPv4, так и IPv6 адреса; целые числа меньше 2\*\*32 по умолчанию считаются IPv4. Исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) выбрасывается, если *address* не представляет допустимый IPv4 или IPv6 адрес.4849Недостаток этих удобных функций в том, что необходимость поддержки обоих форматов – IPv4 и IPv6 – приводит к тому, что сообщения об ошибках содержат минимум информации о точной ошибке, поскольку функции не знают, какой формат предполагался. Более подробные сообщения об ошибках можно получить, напрямую вызывая соответствующие версии конструкторов классов.5051## 21.28.2. IP-адреса5253### 21.28.2.1. Объекты адресов5455Объекты [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address) и [`IPv6Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Address) имеют много общих атрибутов. Некоторые атрибуты, имеющие смысл только для IPv6-адресов, также реализованы в объектах [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address), чтобы упростить написание кода, корректно работающего с обеими версиями IP.5657#### `class ipaddress.IPv4Address(address)`5859Создаёт IPv4-адрес. Исключение [`AddressValueError`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.AddressValueError) выбрасывается, если *address* не является допустимым IPv4-адресом.6061Корректным IPv4-адресом считается следующее:62631. Строка в десятично-точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделённых точками (например, `192.168.0.1`). Каждое целое число представляет октет (байт) адреса. Начальные нули допускаются только для значений меньше 8 (поскольку между десятичной и восьмеричной интерпретацией таких строк нет неоднозначности).642. Целое число, помещающееся в 32 бита.653. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) длиной 4 (старший октет первым).6667```python68>>> ipaddress.IPv4Address('192.168.0.1')69IPv4Address('192.168.0.1')70>>> ipaddress.IPv4Address(3232235521)71IPv4Address('192.168.0.1')72>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')73IPv4Address('192.168.0.1')74```7576#### `version`7778Соответствующий номер версии: `4` для IPv4, `6` для IPv6.7980#### `max_prefixlen`8182Общее количество бит в представлении адреса для данной версии: `32` для IPv4, `128` для IPv6.8384Префикс определяет количество старших бит в адресе, которые сравниваются, чтобы определить, принадлежит ли адрес сети.8586#### `compressed`8788#### `exploded`8990Строковое представление в десятичной записи с точками. Начальные нули никогда не включаются в представление.9192Поскольку IPv4 не определяет сокращённой записи для адресов с нулевыми октетами, эти два атрибута всегда совпадают с `str(addr)` для IPv4-адресов. Наличие этих атрибутов упрощает написание кода отображения, который может работать как с IPv4, так и с IPv6-адресами.9394#### `packed`9596Двоичное представление этого адреса – объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) соответствующей длины (старший октет первым). Для IPv4 это 4 байта, для IPv6 – 16 байт.9798#### `is_multicast`99100`True`, если адрес зарезервирован для многоадресной рассылки. См. [**RFC 3171**](https://python-all.ru/3.4/library/ipaddress.html) (для IPv4) или [**RFC 2373**](https://python-all.ru/3.4/library/ipaddress.html) (для IPv6).101102#### `is_private`103104`True`, если адрес выделен для частных сетей. См. [iana-ipv4-special-registry](https://python-all.ru/3.4/library/ipaddress.html) (для IPv4) или [iana-ipv6-special-registry](https://python-all.ru/3.4/library/ipaddress.html) (для IPv6).105106#### `is_global`107108`True`, если адрес выделен для публичных сетей. См. [iana-ipv4-special-registry](https://python-all.ru/3.4/library/ipaddress.html) (для IPv4) или [iana-ipv6-special-registry](https://python-all.ru/3.4/library/ipaddress.html) (для IPv6).109110Новое в версии 3.4.111112#### `is_unspecified`113114`True`, если адрес неопределён. См. [**RFC 5735**](https://python-all.ru/3.4/library/ipaddress.html) (для IPv4) или [**RFC 2373**](https://python-all.ru/3.4/library/ipaddress.html) (для IPv6).115116#### `is_reserved`117118`True`, если адрес иным образом зарезервирован IETF.119120#### `is_loopback`121122`True`, если это адрес loopback. См. [**RFC 3330**](https://python-all.ru/3.4/library/ipaddress.html) (для IPv4) или [**RFC 2373**](https://python-all.ru/3.4/library/ipaddress.html) (для IPv6).123124#### `is_link_local`125126`True`, если адрес зарезервирован для использования в link-local. См. [**RFC 3927**](https://python-all.ru/3.4/library/ipaddress.html).127128#### `class ipaddress.IPv6Address(address)`129130Создаёт IPv6-адрес. Если *address* не является допустимым IPv6-адресом, возникает исключение [`AddressValueError`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.AddressValueError).131132Допустимый IPv6-адрес образуется следующим образом:1331341. Строка, состоящая из восьми групп по четыре шестнадцатеричные цифры, каждая group представляет 16 бит. Группы разделяются двоеточиями. Это описывает *развёрнутую* (полную) нотацию. Строка может также быть *сжатой* (краткой нотацией) различными способами. См. [**RFC 4291**](https://python-all.ru/3.4/library/ipaddress.html) для подробностей. Например, `"0000:0000:0000:0000:0000:0abc:0007:0def"` может быть сжата до `"::abc:7:def"`.1352. Целое число, помещающееся в 128 бит.1363. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) длиной 16 байт, с прямым порядком байт (big-endian).137138```python139>>> ipaddress.IPv6Address('2001:db8::1000')140IPv6Address('2001:db8::1000')141```142143#### `compressed`144145Краткая форма представления адреса, в которой опущены ведущие нули в группах, а самая длинная последовательность групп, состоящих полностью из нулей, сжата в одну пустую группу.146147Это также значение, возвращаемое `str(addr)` для IPv6-адресов.148149#### `exploded`150151Полная форма представления адреса, включающая все ведущие нули и группы, состоящие полностью из нулей.152153Для следующих атрибутов см. соответствующую документацию класса [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address):154155#### `packed`156157#### `version`158159#### `max_prefixlen`160161#### `is_multicast`162163#### `is_private`164165#### `is_global`166167#### `is_unspecified`168169#### `is_reserved`170171#### `is_loopback`172173#### `is_link_local`174175Новое в версии 3.4: is\_global176177#### `is_site_local`178179`True`, если адрес зарезервирован для использования в site-local. Обратите внимание, что пространство site-local адресов было объявлено устаревшим в [**RFC 3879**](https://python-all.ru/3.4/library/ipaddress.html). Используйте [`is_private`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address.is_private) для проверки, находится ли этот адрес в пространстве уникальных локальных адресов, как определено в [**RFC 4193**](https://python-all.ru/3.4/library/ipaddress.html).180181#### `ipv4_mapped`182183Для адресов, которые выглядят как IPv4-mapped адреса (начинаются с `::FFFF/96`), это свойство возвращает встроенный IPv4-адрес. Для любого другого адреса это свойство будет `None`.184185#### `sixtofour`186187Для адресов, которые выглядят как 6to4 адреса (начинаются с `2002::/16`) в соответствии с [**RFC 3056**](https://python-all.ru/3.4/library/ipaddress.html), это свойство возвращает встроенный IPv4-адрес. Для любого другого адреса это свойство будет `None`.188189#### `teredo`190191Для адресов, которые выглядят как Teredo адреса (начинаются с `2001::/32`) в соответствии с [**RFC 4380**](https://python-all.ru/3.4/library/ipaddress.html), это свойство возвращает встроенную пару IP-адресов `(server, client)`. Для любого другого адреса это свойство будет `None`.192193### 21.28.2.2. Преобразование в строки и целые числа194195Для взаимодействия с сетевыми интерфейсами, такими как модуль socket, адреса должны быть преобразованы в строки или целые числа. Это делается с помощью встроенных функций [`str()`](https://python-all.ru/3.4/library/stdtypes.html#str) и [`int()`](https://python-all.ru/3.4/library/functions.html#int):196197```python198>>> str(ipaddress.IPv4Address('192.168.0.1'))199'192.168.0.1'200>>> int(ipaddress.IPv4Address('192.168.0.1'))2013232235521202>>> str(ipaddress.IPv6Address('::1'))203'::1'204>>> int(ipaddress.IPv6Address('::1'))2051206```207208### 21.28.2.3. Операторы209210Объекты адресов поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (т.е. IPv4 с IPv4, IPv6 с IPv6).211212#### 21.28.2.3.1. Операторы сравнения213214Объекты адресов можно сравнивать с помощью обычных операторов сравнения. Несколько примеров:215216```python217>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')218True219>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')220False221>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')222True223```224225#### 21.28.2.3.2. Арифметические операторы226227Целые числа можно прибавлять к объектам адресов или вычитать из них. Несколько примеров:228229```python230>>> IPv4Address('127.0.0.2') + 3231IPv4Address('127.0.0.5')232>>> IPv4Address('127.0.0.2') - 3233IPv4Address('126.255.255.255')234>>> IPv4Address('255.255.255.255') + 1235Traceback (most recent call last):236  File "<stdin>", line 1, in <module>237ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address238```239240## 21.28.3. Определения IP-сетей241242Объекты [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network) предоставляют механизм для определения и проверки определений IP-сетей. Определение сети состоит из *маски* и *сетевого адреса* и, таким образом, задаёт диапазон IP-адресов, которые равны сетевому адресу при наложении маски (побитовое И) с маской. Например, определение сети с маской `255.255.255.0` и сетевым адресом `192.168.1.0` состоит из IP-адресов в диапазоне от `192.168.1.0` до `192.168.1.255` включительно.243244### 21.28.3.1. Префикс, маска сети и маска хоста245246There are several equivalent ways to specify IP network masks. A *prefix* `/<nbits>` is a notation that denotes how many high-order bits are set in the network mask. A *net mask* is an IP address with some number of high-order bits set. Thus the prefix `/24` is equivalent to the net mask `255.255.255.0` in IPv4, or `ffff:ff00::` in IPv6. In addition, a *host mask* is the logical inverse of a *net mask*, and is sometimes used (for example in Cisco access control lists) to denote a network mask. The host mask equivalent to `/24` in IPv4 is `0.0.0.255`.247248### 21.28.3.2. Объекты сетей249250Все атрибуты, реализованные объектами адресов, также реализованы и объектами сетей. Кроме того, объекты сетей реализуют дополнительные атрибуты. Все они общие для [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network), поэтому для избежания дублирования они документированы только для [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network).251252#### `class ipaddress.IPv4Network(address, strict=True)`253254Создаёт определение IPv4-сети. *адрес* может быть одним из следующих:2552561. Строка, содержащая IP-адрес и необязательную маску, разделённые косой чертой (`/`). IP-адрес является сетевым адресом, а маска может быть либо числом, которое означает *префикс*, либо строковым представлением IPv4-адреса. Во втором случае маска интерпретируется как *маска сети*, если она начинается с ненулевого поля, или как *маска хоста*, если начинается с нулевого поля. Если маска не указана, считается, что она равна `/32`.257258   Например, следующие спецификации *адрес* эквивалентны: `192.168.1.0/24`, `192.168.1.0/255.255.255.0` и `192.168.1.0/0.0.0.255`.2592. Целое число, помещающееся в 32 бита. Оно эквивалентно сети с одним адресом, где адресом сети является *address*, а маской – `/32`.2603. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) длиной 4, big-endian. Интерпретация аналогична целочисленному *адресу*.261262[`AddressValueError`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.AddressValueError) возникает, если *address* не является допустимым IPv4-адресом. [`NetmaskValueError`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.NetmaskValueError) возникает, если маска недопустима для IPv4-адреса.263264Если *strict* равен `True` и в переданном адресе установлены биты хоста, то возникает [``ValueError](https://python-all.ru/3.4/library/exceptions.html#ValueError). В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.265266Если не указано иное, все методы сетей, принимающие другие объекты сетей/адресов, вызывают [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError), если версия IP аргумента несовместима с `self`.267268#### `version`269270#### `max_prefixlen`271272Обратитесь к соответствующей документации атрибута в [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address).273274#### `is_multicast`275276#### `is_private`277278#### `is_unspecified`279280#### `is_reserved`281282#### `is_loopback`283284#### `is_link_local`285286Эти атрибуты истинны для сети в целом, если они истинны как для сетевого адреса, так и для широковещательного адреса287288#### `network_address`289290Сетевой адрес для этой сети. Сетевой адрес и длина префикса вместе однозначно определяют сеть.291292#### `broadcast_address`293294Широковещательный адрес для этой сети. Пакеты, отправленные на широковещательный адрес, должны быть получены каждым хостом в сети.295296#### `hostmask`297298Маска хоста в виде строки.299300#### `with_prefixlen`301302#### `compressed`303304#### `exploded`305306Строковое представление сети с маской в префиксной нотации.307308`with_prefixlen` и `compressed` всегда совпадают с `str(network)`. `exploded` использует развернутую форму сетевого адреса.309310#### `with_netmask`311312Строковое представление сети с маской в нотации маски сети.313314#### `with_hostmask`315316Строковое представление сети с маской в нотации хостовой маски.317318#### `num_addresses`319320Общее количество адресов в сети.321322#### `prefixlen`323324Длина префикса сети в битах.325326#### `hosts()`327328Возвращает итератор по доступным хостам в сети. Доступные хосты – это все IP-адреса, принадлежащие сети, за исключением самого сетевого адреса и широковещательного адреса сети.329330```python331>>> list(ip_network('192.0.2.0/29').hosts())  332[IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),333 IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),334 IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]335```336337#### `overlaps(other)`338339`True`, если данная сеть частично или полностью содержится в *other* или *other* полностью содержится в данной сети.340341#### `address_exclude(network)`342343Вычисляет определения сетей, получающиеся в результате удаления заданной *сети* из данной. Возвращает итератор объектов сетей. Вызывает [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError), если *сеть* не полностью содержится в данной сети.344345```python346>>> n1 = ip_network('192.0.2.0/28')347>>> n2 = ip_network('192.0.2.1/32')348>>> list(n1.address_exclude(n2))  349[IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),350 IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]351```352353#### `subnets(prefixlen_diff=1, new_prefix=None)`354355Подсети, объединение которых образует текущее определение сети, в зависимости от значений аргументов. *prefixlen\_diff* – это величина, на которую должна быть увеличена длина нашего префикса. *new\_prefix* – это желаемый новый префикс подсетей; он должен быть больше нашего префикса. Должен быть задан ровно один из *prefixlen\_diff* и *new\_prefix*. Возвращает итератор объектов сети.356357```python358>>> list(ip_network('192.0.2.0/24').subnets())359[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]360>>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))  361[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),362 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]363>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))  364[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),365 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]366>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))367Traceback (most recent call last):368  File "<stdin>", line 1, in <module>369    raise ValueError('new prefix must be longer')370ValueError: new prefix must be longer371>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))372[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]373```374375#### `supernet(prefixlen_diff=1, new_prefix=None)`376377Суперсеть, содержащая данное определение сети, в зависимости от значений аргументов. *prefixlen\_diff* – это величина, на которую должна быть уменьшена длина нашего префикса. *new\_prefix* – это желаемый новый префикс суперсети; он должен быть меньше нашего префикса. Должен быть задан ровно один из *prefixlen\_diff* и *new\_prefix*. Возвращает один объект сети.378379```python380>>> ip_network('192.0.2.0/24').supernet()381IPv4Network('192.0.2.0/23')382>>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)383IPv4Network('192.0.0.0/22')384>>> ip_network('192.0.2.0/24').supernet(new_prefix=20)385IPv4Network('192.0.0.0/20')386```387388#### `compare_networks(other)`389390Сравнивает данную сеть с *другим*. При таком сравнении учитываются только сетевые адреса; биты хоста не учитываются. Возвращает `-1`, `0` или `1`.391392```python393>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))394-1395>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))3961397>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))3980399```400401#### `class ipaddress.IPv6Network(address, strict=True)`402403Создаёт определение IPv6-сети. *адрес* может быть одним из следующих:4044051. Строка, содержащая IP-адрес и необязательную маску, разделённые косой чертой (`/`). IP-адрес является сетевым адресом, а маска может быть либо числом, которое означает *префикс*, либо строковым представлением IPv6-адреса. Во втором случае маска интерпретируется как *маска сети*. Если маска не указана, считается, что она равна `/128`.406407   Например, следующие спецификации *адреса* эквивалентны: `2001:db00::0/24` и `2001:db00::0/ffff:ff00::`.4082. Целое число, помещающееся в 128 бит. Это эквивалентно сети с одним адресом, где сетевым адресом является *адрес*, а маской – `/128`.4093. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.4/library/functions.html#bytes) длиной 16, big-endian. Интерпретация аналогична целочисленному *адресу*.410411Исключение [`AddressValueError`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.AddressValueError) возникает, если *адрес* не является допустимым IPv6 адресом. Исключение [`NetmaskValueError`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.NetmaskValueError) возникает, если маска недопустима для адреса IPv6.412413Если *strict* равно `True` и в указанном адресе установлены биты хоста, то вызывается исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError). В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.414415#### `version`416417#### `max_prefixlen`418419#### `is_multicast`420421#### `is_private`422423#### `is_unspecified`424425#### `is_reserved`426427#### `is_loopback`428429#### `is_link_local`430431#### `network_address`432433#### `broadcast_address`434435#### `hostmask`436437#### `with_prefixlen`438439#### `compressed`440441#### `exploded`442443#### `with_netmask`444445#### `with_hostmask`446447#### `num_addresses`448449#### `prefixlen`450451#### `hosts()`452453#### `overlaps(other)`454455#### `address_exclude(network)`456457#### `subnets(prefixlen_diff=1, new_prefix=None)`458459#### `supernet(prefixlen_diff=1, new_prefix=None)`460461#### `compare_networks(other)`462463Смотрите документацию соответствующего атрибута в [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network)464465#### `is_site_local`466467Этот атрибут истинен для всей сети, если он истинен как для сетевого адреса, так и для широковещательного адреса.468469### 21.28.3.3. Операторы470471Сетевые объекты поддерживают некоторые операторы. Если не указано иное, операторы можно применять только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).472473#### 21.28.3.3.1. Логические операторы474475Сетевые объекты можно сравнивать с помощью стандартного набора логических операторов, аналогично адресным объектам.476477#### 21.28.3.3.2. Итерация478479Объекты сети можно перебирать, чтобы получить список всех адресов, принадлежащих сети. При переборе возвращаются *все* хосты, включая неиспользуемые (для получения используемых хостов используйте метод [`hosts()`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network.hosts)). Пример:480481```python482>>> for addr in IPv4Network('192.0.2.0/28'):483...   addr484...485IPv4Address('192.0.2.0')486IPv4Address('192.0.2.1')487IPv4Address('192.0.2.2')488IPv4Address('192.0.2.3')489IPv4Address('192.0.2.4')490IPv4Address('192.0.2.5')491IPv4Address('192.0.2.6')492IPv4Address('192.0.2.7')493IPv4Address('192.0.2.8')494IPv4Address('192.0.2.9')495IPv4Address('192.0.2.10')496IPv4Address('192.0.2.11')497IPv4Address('192.0.2.12')498IPv4Address('192.0.2.13')499IPv4Address('192.0.2.14')500IPv4Address('192.0.2.15')501```502503#### 21.28.3.3.3. Сети как контейнеры адресов504505Сетевые объекты могут выступать в качестве контейнеров адресов. Несколько примеров:506507```python508>>> IPv4Network('192.0.2.0/28')[0]509IPv4Address('192.0.2.0')510>>> IPv4Network('192.0.2.0/28')[15]511IPv4Address('192.0.2.15')512>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')513True514>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')515False516```517518## 21.28.4. Объекты интерфейса519520#### `class ipaddress.IPv4Interface(address)`521522Создаёт интерфейс IPv4. Значение *address* такое же, как в конструкторе [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network), за исключением того, что произвольные адреса хостов всегда принимаются.523524[`IPv4Interface`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Interface) является подклассом [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address), поэтому наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:525526#### `ip`527528Адрес ([`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address)) без информации о сети.529530```python531>>> interface = IPv4Interface('192.0.2.5/24')532>>> interface.ip533IPv4Address('192.0.2.5')534```535536#### `network`537538Сеть ([`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network)), к которой принадлежит этот интерфейс.539540```python541>>> interface = IPv4Interface('192.0.2.5/24')542>>> interface.network543IPv4Network('192.0.2.0/24')544```545546#### `with_prefixlen`547548Строковое представление интерфейса с маской в префиксной нотации.549550```python551>>> interface = IPv4Interface('192.0.2.5/24')552>>> interface.with_prefixlen553'192.0.2.5/24'554```555556#### `with_netmask`557558Строковое представление интерфейса, где сеть указана в виде маски сети.559560```python561>>> interface = IPv4Interface('192.0.2.5/24')562>>> interface.with_netmask563'192.0.2.5/255.255.255.0'564```565566#### `with_hostmask`567568Строковое представление интерфейса, где сеть указана в виде маски хоста.569570```python571>>> interface = IPv4Interface('192.0.2.5/24')572>>> interface.with_hostmask573'192.0.2.5/0.0.0.255'574```575576#### `class ipaddress.IPv6Interface(address)`577578Создаёт интерфейс IPv6. Значение *address* такое же, как в конструкторе [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network), за исключением того, что произвольные адреса хостов всегда принимаются.579580[`IPv6Interface`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Interface) является подклассом [`IPv6Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Address), поэтому наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:581582#### `ip`583584#### `network`585586#### `with_prefixlen`587588#### `with_netmask`589590#### `with_hostmask`591592Смотрите документацию соответствующего атрибута в [`IPv4Interface`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Interface).593594## 21.28.5. Другие функции уровня модуля595596Модуль также предоставляет следующие функции уровня модуля:597598#### `ipaddress.v4_int_to_packed(address)`599600Представляет адрес в виде 4 упакованных байтов в сетевом порядке (big-endian). *address* – это целочисленное представление IPv4-адреса. Исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) возбуждается, если целое число отрицательное или слишком велико для IPv4-адреса.601602```python603>>> ipaddress.ip_address(3221225985)604IPv4Address('192.0.2.1')605>>> ipaddress.v4_int_to_packed(3221225985)606b'\xc0\x00\x02\x01'607```608609#### `ipaddress.v6_int_to_packed(address)`610611Представляет адрес в виде 16 упакованных байтов в сетевом порядке (big-endian). *address* – это целочисленное представление IPv6-адреса. Исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) возбуждается, если целое число отрицательное или слишком велико для IPv6-адреса.612613#### `ipaddress.summarize_address_range(first, last)`614615Возвращает итератор свёрнутого диапазона сетей по первому и последнему IP-адресам. *first* – первый адрес [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address) или [`IPv6Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Address) в диапазоне, а *last* – последний адрес [`IPv4Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Address) или [`IPv6Address`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Address) в диапазоне. Исключение [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError) возбуждается, если *first* или *last* не являются IP-адресами или имеют разные версии. Исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) возбуждается, если *last* не больше *first* или если версия адреса *first* не равна 4 или 6.616617```python618>>> [ipaddr for ipaddr in ipaddress.summarize_address_range(619...    ipaddress.IPv4Address('192.0.2.0'),620...    ipaddress.IPv4Address('192.0.2.130'))]621[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]622```623624#### `ipaddress.collapse_addresses(addresses)`625626Возвращает итератор свёрнутых объектов [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network). *addresses* – это итератор объектов [`IPv4Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.4/library/ipaddress.html#ipaddress.IPv6Network). Исключение [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError) возбуждается, если *addresses* содержит объекты разных версий.627628```python629>>> [ipaddr for ipaddr in630... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),631... ipaddress.IPv4Network('192.0.2.128/25')])]632[IPv4Network('192.0.2.0/24')]633```634635#### `ipaddress.get_mixed_type_key(obj)`636637Возвращает ключ, подходящий для сортировки сетей и адресов. Объекты Address и Network по умолчанию не сортируются; они принципиально разные, поэтому выражение:638639```python640IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')641```642643не имеет смысла. Однако в некоторых случаях может потребоваться, чтобы [`ipaddress`](https://python-all.ru/3.4/library/ipaddress.html#module-ipaddress) всё равно сортировал их. Если это необходимо, можно использовать эту функцию в качестве аргумента `key` для [`sorted()`](https://python-all.ru/3.4/library/functions.html#sorted).644645*obj* – это объект сети или адреса.646647## 21.28.6. Пользовательские исключения648649Для поддержки более конкретных сообщений об ошибках от конструкторов классов модуль определяет следующие исключения:650651#### `exception ipaddress.AddressValueError(ValueError)`652653Любая ошибка значения, связанная с адресом.654655#### `exception ipaddress.NetmaskValueError(ValueError)`656657Любая ошибка значения, связанная с маской подсети.658