ipaddress.md
1> **Источник:** https://python-all.ru/3.3/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.3/library/ipaddress.html#module-ipaddress) – библиотека для работы с IPv4/IPv689**Исходный код:** [Lib/ipaddress.py](https://python-all.ru/src/3.3/Lib/ipaddress.py)1011---1213> **Примечание**14>15> Модуль `ipaddress` был включён в стандартную библиотеку на [*временной основе*](https://python-all.ru/3.3/glossary.html#term-provisional-package). Разработчики могут вносить изменения, несовместимые с предыдущими версиями (вплоть до удаления пакета), если сочтут это необходимым.1617[`ipaddress`](https://python-all.ru/3.3/library/ipaddress.html#module-ipaddress) предоставляет возможности для создания, изменения и работы с адресами и сетями IPv4 и IPv6.1819Функции и классы этого модуля упрощают выполнение различных задач, связанных с IP-адресами: проверку, находятся ли два хоста в одной подсети; перебор всех хостов в заданной подсети; проверку, является ли строка корректным IP-адресом или определением сети, и так далее.2021Это полный справочник по API модуля – обзор и введение см. в разделе [*An introduction to the ipaddress module*](https://python-all.ru/3.3/howto/ipaddress.html#ipaddress-howto).2223Новое в версии 3.3.2425## 21.28.1. Удобные фабричные функции2627Модуль [`ipaddress`](https://python-all.ru/3.3/library/ipaddress.html#module-ipaddress) предоставляет фабричные функции для удобного создания IP-адресов, сетей и интерфейсов:2829#### `ipaddress.ip_address(address)`3031Возвращает объект [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address) или [`IPv6Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Address) в зависимости от IP-адреса, переданного в качестве аргумента. Можно передавать как IPv4, так и IPv6 адреса; целые числа меньше 2\*\*32 по умолчанию считаются IPv4. Исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError) выбрасывается, если *address* не представляет допустимый IPv4 или IPv6 адрес.3233```python34>>> ipaddress.ip_address('192.168.0.1')35IPv4Address('192.168.0.1')36>>> ipaddress.ip_address('2001:db8::')37IPv6Address('2001:db8::')38```3940#### `ipaddress.ip_network(address, strict=True)`4142Возвращает объект [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network) в зависимости от IP-адреса, переданного в качестве аргумента. *address* – это строка или целое число, представляющее IP-сеть. Можно передавать как IPv4, так и IPv6 сети; целые числа меньше 2\*\*32 по умолчанию считаются IPv4. *strict* передаётся в конструктор [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network). Исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError) выбрасывается, если *address* не представляет допустимый IPv4 или IPv6 адрес, или если в сети установлены биты хоста.4344```python45>>> ipaddress.ip_network('192.168.0.0/28')46IPv4Network('192.168.0.0/28')47```4849#### `ipaddress.ip_interface(address)`5051Возвращает объект [`IPv4Interface`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Interface) или [`IPv6Interface`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Interface) в зависимости от IP-адреса, переданного в качестве аргумента. *address* – это строка или целое число, представляющее IP-адрес. Можно передавать как IPv4, так и IPv6 адреса; целые числа меньше 2\*\*32 по умолчанию считаются IPv4. Исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError) выбрасывается, если *address* не представляет допустимый IPv4 или IPv6 адрес.5253Недостаток этих удобных функций в том, что необходимость поддержки обоих форматов – IPv4 и IPv6 – приводит к тому, что сообщения об ошибках содержат минимум информации о точной ошибке, поскольку функции не знают, какой формат предполагался. Более подробные сообщения об ошибках можно получить, напрямую вызывая соответствующие версии конструкторов классов.5455## 21.28.2. IP-адреса5657### 21.28.2.1. Объекты адресов5859Объекты [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address) и [`IPv6Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Address) имеют много общих атрибутов. Некоторые атрибуты, имеющие смысл только для IPv6-адресов, также реализованы в объектах [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address), чтобы упростить написание кода, корректно работающего с обеими версиями IP.6061#### `class ipaddress.IPv4Address(address)`6263Создаёт IPv4-адрес. Исключение [`AddressValueError`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.AddressValueError) выбрасывается, если *address* не является допустимым IPv4-адресом.6465Корректным IPv4-адресом считается следующее:66671. Строка в десятично-точечной нотации, состоящая из четырёх десятичных целых чисел в диапазоне от 0 до 255 включительно, разделённых точками (например, `192.168.0.1`). Каждое целое число представляет октет (байт) адреса. Начальные нули допускаются только для значений меньше 8 (поскольку в таких строках нет неоднозначности между десятичной и восьмеричной интерпретацией).682. Целое число, помещающееся в 32 бита.693. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes) длиной 4 (старший октет первым).7071```python72>>> ipaddress.IPv4Address('192.168.0.1')73IPv4Address('192.168.0.1')74>>> ipaddress.IPv4Address(3232235521)75IPv4Address('192.168.0.1')76>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')77IPv4Address('192.168.0.1')78```7980#### `version`8182Соответствующий номер версии: `4` для IPv4, `6` для IPv6.8384#### `max_prefixlen`8586Общее количество бит в представлении адреса для данной версии: `32` для IPv4, `128` для IPv6.8788Префикс определяет количество старших бит в адресе, которые сравниваются, чтобы определить, принадлежит ли адрес сети.8990#### `compressed`9192#### `exploded`9394Строковое представление в десятичной записи с точками. Начальные нули никогда не включаются в представление.9596Поскольку IPv4 не определяет сокращённой записи для адресов с нулевыми октетами, эти два атрибута всегда совпадают с `str(addr)` для IPv4-адресов. Наличие этих атрибутов упрощает написание кода отображения, который может работать как с IPv4, так и с IPv6-адресами.9798#### `packed`99100Двоичное представление этого адреса – объект [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes) соответствующей длины (старший октет первым). Для IPv4 это 4 байта, для IPv6 – 16 байт.101102#### `is_multicast`103104`True`, если адрес зарезервирован для многоадресной рассылки. См. [**RFC 3171**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv4) или [**RFC 2373**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv6).105106#### `is_private`107108`True`, если адрес выделен для частных сетей. См. [**RFC 1918**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv4) или [**RFC 4193**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv6).109110#### `is_unspecified`111112`True`, если адрес неопределён. См. [**RFC 5735**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv4) или [**RFC 2373**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv6).113114#### `is_reserved`115116`True`, если адрес иным образом зарезервирован IETF.117118#### `is_loopback`119120`True`, если это адрес loopback. См. [**RFC 3330**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv4) или [**RFC 2373**](https://python-all.ru/3.3/library/ipaddress.html) (для IPv6).121122#### `is_link_local`123124`True`, если адрес зарезервирован для использования в link-local. См. [**RFC 3927**](https://python-all.ru/3.3/library/ipaddress.html).125126#### `class ipaddress.IPv6Address(address)`127128Создаёт IPv6-адрес. Если *address* не является допустимым IPv6-адресом, возникает исключение [`AddressValueError`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.AddressValueError).129130Допустимый IPv6-адрес образуется следующим образом:1311321. Строка, состоящая из восьми групп по четыре шестнадцатеричные цифры, каждая group представляет 16 бит. Группы разделяются двоеточиями. Это описывает *развёрнутую* (полную) нотацию. Строка может также быть *сжатой* (краткой нотацией) различными способами. См. [**RFC 4291**](https://python-all.ru/3.3/library/ipaddress.html) для подробностей. Например, `"0000:0000:0000:0000:0000:0abc:0007:0def"` может быть сжата до `"::abc:7:def"`.1332. Целое число, помещающееся в 128 бит.1343. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes) длиной 16 байт, с прямым порядком байт (big-endian).135136```python137>>> ipaddress.IPv6Address('2001:db8::1000')138IPv6Address('2001:db8::1000')139```140141#### `compressed`142143Краткая форма представления адреса, в которой опущены ведущие нули в группах, а самая длинная последовательность групп, состоящих полностью из нулей, сжата в одну пустую группу.144145Это также значение, возвращаемое `str(addr)` для IPv6-адресов.146147#### `exploded`148149Полная форма представления адреса, включающая все ведущие нули и группы, состоящие полностью из нулей.150151#### `packed`152153#### `version`154155#### `max_prefixlen`156157#### `is_multicast`158159#### `is_private`160161#### `is_unspecified`162163#### `is_reserved`164165#### `is_loopback`166167#### `is_link_local`168169Обратитесь к соответствующей документации атрибута в [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address).170171#### `is_site_local`172173`True`, если адрес зарезервирован для использования в site-local. Обратите внимание, что пространство site-local адресов было объявлено устаревшим в [**RFC 3879**](https://python-all.ru/3.3/library/ipaddress.html). Используйте [`is_private`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address.is_private) для проверки, находится ли этот адрес в пространстве уникальных локальных адресов, как определено в [**RFC 4193**](https://python-all.ru/3.3/library/ipaddress.html).174175#### `ipv4_mapped`176177Для адресов, которые выглядят как IPv4-mapped адреса (начинаются с `::FFFF/96`), это свойство возвращает встроенный IPv4-адрес. Для любого другого адреса это свойство будет `None`.178179#### `sixtofour`180181Для адресов, которые выглядят как 6to4 адреса (начинаются с `2002::/16`) в соответствии с [**RFC 3056**](https://python-all.ru/3.3/library/ipaddress.html), это свойство возвращает встроенный IPv4-адрес. Для любого другого адреса это свойство будет `None`.182183#### `teredo`184185Для адресов, которые выглядят как Teredo адреса (начинаются с `2001::/32`) в соответствии с [**RFC 4380**](https://python-all.ru/3.3/library/ipaddress.html), это свойство возвращает встроенную пару IP-адресов `(server, client)`. Для любого другого адреса это свойство будет `None`.186187### 21.28.2.2. Преобразование в строки и целые числа188189Для взаимодействия с сетевыми интерфейсами, такими как модуль socket, адреса должны быть преобразованы в строки или целые числа. Это делается с помощью встроенных функций [`str()`](https://python-all.ru/3.3/library/stdtypes.html#str) и [`int()`](https://python-all.ru/3.3/library/functions.html#int):190191```python192>>> str(ipaddress.IPv4Address('192.168.0.1'))193'192.168.0.1'194>>> int(ipaddress.IPv4Address('192.168.0.1'))1953232235521196>>> str(ipaddress.IPv6Address('::1'))197'::1'198>>> int(ipaddress.IPv6Address('::1'))1991200```201202### 21.28.2.3. Операторы203204Объекты адресов поддерживают некоторые операторы. Если не указано иное, операторы могут применяться только между совместимыми объектами (т.е. IPv4 с IPv4, IPv6 с IPv6).205206#### 21.28.2.3.1. Операторы сравнения207208Объекты адресов можно сравнивать с помощью обычных операторов сравнения. Несколько примеров:209210```python211>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')212True213>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')214False215>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')216True217```218219#### 21.28.2.3.2. Арифметические операторы220221Целые числа можно прибавлять к объектам адресов или вычитать из них. Несколько примеров:222223```python224>>> IPv4Address('127.0.0.2') + 3225IPv4Address('127.0.0.5')226>>> IPv4Address('127.0.0.2') - 3227IPv4Address('126.255.255.255')228>>> IPv4Address('255.255.255.255') + 1229Traceback (most recent call last):230 File "<stdin>", line 1, in <module>231ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address232```233234## 21.28.3. Определения IP-сетей235236Объекты [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network) предоставляют механизм для определения и проверки определений IP-сетей. Определение сети состоит из *маски* и *сетевого адреса* и, таким образом, задаёт диапазон IP-адресов, которые равны сетевому адресу при наложении маски (побитовое И) с маской. Например, определение сети с маской `255.255.255.0` и сетевым адресом `192.168.1.0` состоит из IP-адресов в диапазоне от `192.168.1.0` до `192.168.1.255` включительно.237238### 21.28.3.1. Префикс, маска сети и маска хоста239240There 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`.241242### 21.28.3.2. Объекты сетей243244Все атрибуты, реализованные объектами адресов, также реализованы и объектами сетей. Кроме того, объекты сетей реализуют дополнительные атрибуты. Все они общие для [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network), поэтому для избежания дублирования они документированы только для [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network).245246#### `class ipaddress.IPv4Network(address, strict=True)`247248Создаёт определение IPv4-сети. *адрес* может быть одним из следующих:2492501. Строка, содержащая IP-адрес и необязательную маску, разделённые косой чертой (`/`). IP-адрес является сетевым адресом, а маска может быть либо числом, которое означает *префикс*, либо строковым представлением IPv4-адреса. Во втором случае маска интерпретируется как *маска сети*, если она начинается с ненулевого поля, или как *маска хоста*, если начинается с нулевого поля. Если маска не указана, считается, что она равна `/32`.251252 Например, следующие спецификации *адрес* эквивалентны: `192.168.1.0/24`, `192.168.1.0/255.255.255.0` и `192.168.1.0/0.0.0.255`.2532. Целое число, помещающееся в 32 бита. Оно эквивалентно сети с одним адресом, где адресом сети является *address*, а маской – `/32`.2543. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes) длиной 4, big-endian. Интерпретация аналогична целочисленному *адресу*.255256[`AddressValueError`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.AddressValueError) возникает, если *address* не является допустимым IPv4-адресом. [`NetmaskValueError`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.NetmaskValueError) возникает, если маска недопустима для IPv4-адреса.257258Если *strict* равно `True` и в указанном адресе установлены биты хоста, то вызывается исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError). В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.259260Если не указано иное, все методы сетей, принимающие другие объекты сетей/адресов, вызывают [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError), если версия IP аргумента несовместима с `self`.261262#### `version`263264#### `max_prefixlen`265266Обратитесь к соответствующей документации атрибута в [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address).267268#### `is_multicast`269270#### `is_private`271272#### `is_unspecified`273274#### `is_reserved`275276#### `is_loopback`277278#### `is_link_local`279280Эти атрибуты истинны для сети в целом, если они истинны как для сетевого адреса, так и для широковещательного адреса281282#### `network_address`283284Сетевой адрес для этой сети. Сетевой адрес и длина префикса вместе однозначно определяют сеть.285286#### `broadcast_address`287288Широковещательный адрес для этой сети. Пакеты, отправленные на широковещательный адрес, должны быть получены каждым хостом в сети.289290#### `hostmask`291292Маска хоста в виде строки.293294#### `with_prefixlen`295296#### `compressed`297298#### `exploded`299300Строковое представление сети с маской в префиксной нотации.301302`with_prefixlen` и `compressed` всегда совпадают с `str(network)`. `exploded` использует развернутую форму сетевого адреса.303304#### `with_netmask`305306Строковое представление сети с маской в нотации маски сети.307308#### `with_hostmask`309310Строковое представление сети с маской в нотации хостовой маски.311312#### `num_addresses`313314Общее количество адресов в сети.315316#### `prefixlen`317318Длина префикса сети в битах.319320#### `hosts()`321322Возвращает итератор по доступным хостам в сети. Доступные хосты – это все IP-адреса, принадлежащие сети, за исключением самого сетевого адреса и широковещательного адреса сети.323324```python325>>> list(ip_network('192.0.2.0/29').hosts()) 326[IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),327 IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),328 IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]329```330331#### `overlaps(other)`332333`True`, если данная сеть частично или полностью содержится в *other* или *other* полностью содержится в данной сети.334335#### `address_exclude(network)`336337Вычисляет определения сетей, получающиеся в результате удаления заданной *сети* из данной. Возвращает итератор объектов сетей. Вызывает [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError), если *сеть* не полностью содержится в данной сети.338339```python340>>> n1 = ip_network('192.0.2.0/28')341>>> n2 = ip_network('192.0.2.1/32')342>>> list(n1.address_exclude(n2)) 343[IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),344 IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]345```346347#### `subnets(prefixlen_diff=1, new_prefix=None)`348349Подсети, объединение которых образует текущее определение сети, в зависимости от значений аргументов. *prefixlen\_diff* – это величина, на которую должна быть увеличена длина нашего префикса. *new\_prefix* – это желаемый новый префикс подсетей; он должен быть больше нашего префикса. Должен быть задан ровно один из *prefixlen\_diff* и *new\_prefix*. Возвращает итератор объектов сети.350351```python352>>> list(ip_network('192.0.2.0/24').subnets())353[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]354>>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) 355[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),356 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]357>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) 358[IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),359 IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]360>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))361Traceback (most recent call last):362 File "<stdin>", line 1, in <module>363 raise ValueError('new prefix must be longer')364ValueError: new prefix must be longer365>>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))366[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]367```368369#### `supernet(prefixlen_diff=1, new_prefix=None)`370371Суперсеть, содержащая данное определение сети, в зависимости от значений аргументов. *prefixlen\_diff* – это величина, на которую должна быть уменьшена длина нашего префикса. *new\_prefix* – это желаемый новый префикс суперсети; он должен быть меньше нашего префикса. Должен быть задан ровно один из *prefixlen\_diff* и *new\_prefix*. Возвращает один объект сети.372373```python374>>> ip_network('192.0.2.0/24').supernet()375IPv4Network('192.0.2.0/23')376>>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)377IPv4Network('192.0.0.0/22')378>>> ip_network('192.0.2.0/24').supernet(new_prefix=20)379IPv4Network('192.0.0.0/20')380```381382#### `compare_networks(other)`383384Сравнивает данную сеть с *другим*. При таком сравнении учитываются только сетевые адреса; биты хоста не учитываются. Возвращает `-1`, `0` или `1`.385386```python387>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))388-1389>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))3901391>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))3920393```394395#### `class ipaddress.IPv6Network(address, strict=True)`396397Создаёт определение IPv6-сети. *адрес* может быть одним из следующих:3983991. Строка, содержащая IP-адрес и необязательную маску, разделённые косой чертой (`/`). IP-адрес является сетевым адресом, а маска может быть либо числом, которое означает *префикс*, либо строковым представлением IPv6-адреса. Во втором случае маска интерпретируется как *маска сети*. Если маска не указана, считается, что она равна `/128`.400401 Например, следующие спецификации *адреса* эквивалентны: `2001:db00::0/24` и `2001:db00::0/ffff:ff00::`.4022. Целое число, помещающееся в 128 бит. Это эквивалентно сети с одним адресом, где сетевым адресом является *адрес*, а маской – `/128`.4033. Целое число, упакованное в объект [`bytes`](https://python-all.ru/3.3/library/functions.html#bytes) длиной 16 байт, big-endian. Интерпретация аналогична целому числу *address*.404405Исключение [`AddressValueError`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.AddressValueError) возникает, если *адрес* не является допустимым IPv6 адресом. Исключение [`NetmaskValueError`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.NetmaskValueError) возникает, если маска недопустима для адреса IPv6.406407Если *strict* равно `True` и в указанном адресе установлены биты хоста, то вызывается исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError). В противном случае биты хоста маскируются для определения соответствующего сетевого адреса.408409#### `version`410411#### `max_prefixlen`412413#### `is_multicast`414415#### `is_private`416417#### `is_unspecified`418419#### `is_reserved`420421#### `is_loopback`422423#### `is_link_local`424425#### `network_address`426427#### `broadcast_address`428429#### `hostmask`430431#### `with_prefixlen`432433#### `compressed`434435#### `exploded`436437#### `with_netmask`438439#### `with_hostmask`440441#### `num_addresses`442443#### `prefixlen`444445#### `hosts()`446447#### `overlaps(other)`448449#### `address_exclude(network)`450451#### `subnets(prefixlen_diff=1, new_prefix=None)`452453#### `supernet(prefixlen_diff=1, new_prefix=None)`454455#### `compare_networks(other)`456457Смотрите документацию соответствующего атрибута в [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network)458459#### `is_site_local`460461Этот атрибут истинен для всей сети, если он истинен как для сетевого адреса, так и для широковещательного адреса.462463### 21.28.3.3. Операторы464465Сетевые объекты поддерживают некоторые операторы. Если не указано иное, операторы можно применять только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).466467#### 21.28.3.3.1. Логические операторы468469Сетевые объекты можно сравнивать с помощью стандартного набора логических операторов, аналогично адресным объектам.470471#### 21.28.3.3.2. Итерация472473Объекты сети можно перебирать, чтобы получить список всех адресов, принадлежащих сети. При переборе возвращаются *все* хосты, включая неиспользуемые (для получения используемых хостов используйте метод [`hosts()`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network.hosts)). Пример:474475```python476>>> for addr in IPv4Network('192.0.2.0/28'):477... addr478...479IPv4Address('192.0.2.0')480IPv4Address('192.0.2.1')481IPv4Address('192.0.2.2')482IPv4Address('192.0.2.3')483IPv4Address('192.0.2.4')484IPv4Address('192.0.2.5')485IPv4Address('192.0.2.6')486IPv4Address('192.0.2.7')487IPv4Address('192.0.2.8')488IPv4Address('192.0.2.9')489IPv4Address('192.0.2.10')490IPv4Address('192.0.2.11')491IPv4Address('192.0.2.12')492IPv4Address('192.0.2.13')493IPv4Address('192.0.2.14')494IPv4Address('192.0.2.15')495```496497#### 21.28.3.3.3. Сети как контейнеры адресов498499Сетевые объекты могут выступать в качестве контейнеров адресов. Несколько примеров:500501```python502>>> IPv4Network('192.0.2.0/28')[0]503IPv4Address('192.0.2.0')504>>> IPv4Network('192.0.2.0/28')[15]505IPv4Address('192.0.2.15')506>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')507True508>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')509False510```511512## 21.28.4. Объекты интерфейса513514#### `class ipaddress.IPv4Interface(address)`515516Создаёт интерфейс IPv4. Значение *address* такое же, как в конструкторе [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network), за исключением того, что произвольные адреса хостов всегда принимаются.517518[`IPv4Interface`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Interface) является подклассом [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address), поэтому наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:519520#### `ip`521522Адрес ([`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address)) без информации о сети.523524```python525>>> interface = IPv4Interface('192.0.2.5/24')526>>> interface.ip527IPv4Address('192.0.2.5')528```529530#### `network`531532Сеть ([`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network)), к которой принадлежит этот интерфейс.533534```python535>>> interface = IPv4Interface('192.0.2.5/24')536>>> interface.network537IPv4Network('192.0.2.0/24')538```539540#### `with_prefixlen`541542Строковое представление интерфейса с маской в префиксной нотации.543544```python545>>> interface = IPv4Interface('192.0.2.5/24')546>>> interface.with_prefixlen547'192.0.2.5/24'548```549550#### `with_netmask`551552Строковое представление интерфейса, где сеть указана в виде маски сети.553554```python555>>> interface = IPv4Interface('192.0.2.5/24')556>>> interface.with_netmask557'192.0.2.5/255.255.255.0'558```559560#### `with_hostmask`561562Строковое представление интерфейса, где сеть указана в виде маски хоста.563564```python565>>> interface = IPv4Interface('192.0.2.5/24')566>>> interface.with_hostmask567'192.0.2.5/0.0.0.255'568```569570#### `class ipaddress.IPv6Interface(address)`571572Создаёт интерфейс IPv6. Значение *address* такое же, как в конструкторе [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network), за исключением того, что произвольные адреса хостов всегда принимаются.573574[`IPv6Interface`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Interface) является подклассом [`IPv6Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Address), поэтому наследует все атрибуты этого класса. Кроме того, доступны следующие атрибуты:575576#### `ip`577578#### `network`579580#### `with_prefixlen`581582#### `with_netmask`583584#### `with_hostmask`585586Смотрите документацию соответствующего атрибута в [`IPv4Interface`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Interface).587588## 21.28.5. Другие функции уровня модуля589590Модуль также предоставляет следующие функции уровня модуля:591592#### `ipaddress.v4_int_to_packed(address)`593594Представляет адрес в виде 4 упакованных байтов в сетевом порядке (big-endian). *address* – это целочисленное представление IPv4-адреса. Исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError) возбуждается, если целое число отрицательное или слишком велико для IPv4-адреса.595596```python597>>> ipaddress.ip_address(3221225985)598IPv4Address('192.0.2.1')599>>> ipaddress.v4_int_to_packed(3221225985)600b'\xc0\x00\x02\x01'601```602603#### `ipaddress.v6_int_to_packed(address)`604605Представляет адрес в виде 16 упакованных байтов в сетевом порядке (big-endian). *address* – это целочисленное представление IPv6-адреса. Исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError) возбуждается, если целое число отрицательное или слишком велико для IPv6-адреса.606607#### `ipaddress.summarize_address_range(first, last)`608609Возвращает итератор свёрнутого диапазона сетей по первому и последнему IP-адресам. *first* – первый адрес [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address) или [`IPv6Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Address) в диапазоне, а *last* – последний адрес [`IPv4Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Address) или [`IPv6Address`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Address) в диапазоне. Исключение [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError) возбуждается, если *first* или *last* не являются IP-адресами или имеют разные версии. Исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError) возбуждается, если *last* не больше *first* или если версия адреса *first* не равна 4 или 6.610611```python612>>> [ipaddr for ipaddr in ipaddress.summarize_address_range(613... ipaddress.IPv4Address('192.0.2.0'),614... ipaddress.IPv4Address('192.0.2.130'))]615[IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]616```617618#### `ipaddress.collapse_addresses(addresses)`619620Возвращает итератор свёрнутых объектов [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network). *addresses* – это итератор объектов [`IPv4Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv4Network) или [`IPv6Network`](https://python-all.ru/3.3/library/ipaddress.html#ipaddress.IPv6Network). Исключение [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError) возбуждается, если *addresses* содержит объекты разных версий.621622```python623>>> [ipaddr for ipaddr in624... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),625... ipaddress.IPv4Network('192.0.2.128/25')])]626[IPv4Network('192.0.2.0/24')]627```628629#### `ipaddress.get_mixed_type_key(obj)`630631Возвращает ключ, подходящий для сортировки сетей и адресов. Объекты Address и Network по умолчанию не сортируются; они принципиально разные, поэтому выражение:632633```python634IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')635```636637не имеет смысла. Однако в некоторых случаях может потребоваться, чтобы [`ipaddress`](https://python-all.ru/3.3/library/ipaddress.html#module-ipaddress) всё равно сортировал их. Если это необходимо, можно использовать эту функцию в качестве аргумента `key` для [`sorted()`](https://python-all.ru/3.3/library/functions.html#sorted).638639*obj* – это объект сети или адреса.640641## 21.28.6. Пользовательские исключения642643Для поддержки более конкретных сообщений об ошибках от конструкторов классов модуль определяет следующие исключения:644645#### `exception ipaddress.AddressValueError(ValueError)`646647Любая ошибка значения, связанная с адресом.648649#### `exception ipaddress.NetmaskValueError(ValueError)`650651Любая ошибка значения, связанная с маской подсети.652