Как получить список IP в сети с помощью Python: модуль ipaddress, создание и работа с IPv4 и IPv6 адресами

0
44

Содержание

Краткая памятка по работе с IP-адресами и сетями в Python

  1. Импортируйте модуль: from ipaddress import *.
  2. Создайте объект сети: net = IPv4Network(‘192.168.1.0/24’).
  3. Получите список всех IP-адресов: all_ips = list(net).
  4. Получите только адреса хостов: hosts = list(net.hosts()).
  5. Проверьте принадлежность адреса: ‘192.168.1.10’ in net.
  6. Получите маску подсети: net.netmask.
  7. Получите широковещательный адрес: net.broadcast_address.
  8. Преобразуйте IP в число: int(IPv4Address(‘10.0.0.1’)).
  9. Разделите сеть на подсети: list(net.subnets()).
  10. Проверьте тип сети: net.is_private, net.is_reserved.
  11. Сравните две сети: net1.compare_networks(net2).
  12. Используйте фабричные функции: ip_address(), ip_network(), ip_interface().

Создания и работа с IPv4 и IPv6 адресами, сетями и интерфейсами

How to - изображение номер один
How to — изображение номер один

Модуль ipaddress предоставляет возможности для создания, управления и работы с адресами и сетями IPv4 и IPv6.

Функции и классы в этом модуле упрощают выполнение различных задач, связанных с IP-адресами, включая проверку того, находятся ли два хоста в одной подсети, итерацию по всем хостам в определенной подсети, проверку того, представляет ли строка действительный IP-адрес или определение сети и т. д.

Определение IP-адресов.

How to validate - изображение номер два
How to validate — изображение номер два

Адреса, часто называемые «адресами хостов», являются основной единицей при работе с IP-адресацией. Самый простой способ создания адресов — использовать фабричную функцию ipaddress.ip_address(), которая автоматически определяет, следует ли создавать адрес IPv4 или IPv6 на основе переданного значения:

Адреса также можно создавать непосредственно из целых чисел. Предполагается, что значения, которые соответствуют 32 битам, являются адресами IPv4:

Чтобы принудительно использовать адреса IPv4 или IPv6, соответствующие классы могут быть вызваны напрямую. Такое поведение полезно для принудительного создания адресов IPv6 для небольших целых чисел:

Определение IP-сетей.

15 - изображение номер три
15 — изображение номер три

Адреса хостов обычно группируются в IP-сети, поэтому модуль ipaddress позволяет создавать, проверять и управлять определениями сети. Сетевые объекты IP состоят из строк, которые определяют диапазон адресов хостов, которые являются частью этой сети. Простейшей формой этой информации является пара «сетевой адрес/сетевой префикс», где префикс определяет количество ведущих битов, которые сравниваются, чтобы определить, является ли адрес частью сети, а сетевой адрес определяет ожидаемое значение этих бит.

Что касается адресов, предусмотрена фабричная функция, которая автоматически определяет правильную версию IP:

Объекты IP-сети не могут иметь никаких битов хоста. На практике это означает, что запись 192.0.2.1/24 не описывает сеть. Такие определения называются объектами сетевых интерфейсов, поскольку нотация ip-on-a-network обычно используется для описания сетевых интерфейсов компьютера в данной сети.

По умолчанию попытка создать сетевой объект с установленными битами хоста приведет к возникновению ValueError. Чтобы запросить приведение дополнительных битов к нулю, в конструктор необходимо передать флаг strict=False:

Как и в случае с адресами, определенный тип сети может быть принудительно создан прямым вызовом конструктора класса вместо использования фабричной функции.

Определение IP-интерфейса.

81 - изображение номер четыре
81 — изображение номер четыре

Если нужно описать адрес в конкретной сети, ни объекта адреса, ни объекта сети недостаточно. Обозначение типа 192.0.2.1/24, используется сетевыми инженерами для определения правил маршрутизаторов и расшифровывается как «хост 192.0.2.1 в сети 192.0.2.0/24». Соответственно, модуль ipaddress предоставляет набор гибридных классов, которые связывают адрес с определенной сетью. Интерфейс для создания идентичен интерфейсу для определения объектов сети, за исключением того, что часть адреса не ограничивается объектом сетевого адреса.

Для создания интерфейса могут использоваться целочисленные входные данные (как в случае с сетями), так же создание определенного типа интерфейса хоста может быть создано прямым вызовом конструктора соответствующего класса

ipaddress.ip_address#

IPAddress from netaddr in - изображение номер пять
IPAddress from netaddr in — изображение номер пять

In: import ipaddress In: ipv4 = ipaddress.ip_address(‘10.0.1.1’) In: ipv4 Out[3]: IPv4Address(‘10.0.1.1’) In: print(ipv4) 10.0.1.1

In: ipv4. ipv4.is_loopback ipv4.is_unspecified ipv4.is_multicast ipv4.max_prefixlen ipv4.is_global ipv4.is_private ipv4.is_link_local ipv4.is_reserved ipv4.reverse_pointer

In: ipv4.is_loopback Out[6]: False In: ipv4.is_multicast Out[7]: False In: ipv4.is_reserved Out[8]: False In: ipv4.is_private Out[9]: True

In: ip1 = ipaddress.ip_address(‘10.0.1.1’) In: ip2 = ipaddress.ip_address(‘10.0.2.1’) In: ip1 > ip2 Out[12]: False In: ip2 > ip1 Out[13]: True In: ip1 == ip2 Out[14]: False In: ip1!= ip2 Out[15]: True In: str(ip1) Out[16]: ‘10.0.1.1’ In: int(ip1) Out[17]: 167772417 In: ip1 + 5 Out[18]: IPv4Address(‘10.0.1.6’) In: ip1 — 5 Out[19]: IPv4Address(‘10.0.0.252’)

Удобные функции фабрики¶

How to generate a random - изображение номер шесть
How to generate a random — изображение номер шесть

ipaddress
Модуль предоставляет функции фабрики для удобного создания IP- адресов, сетей и интерфейсов:

IPv4Address IPv6Address ValueError
Возвращает объект или в зависимости от IP-адреса, переданного в качестве аргумента. Могут быть указаны либо IPv4, либо IPv6 адреса; целые числа меньше 2**32 будут считаться IPv4 по умолчанию. Поднимается, если address не является допустимым адресом IPv4 или IPv6.

IPv4Network IPv6Network IPv4Network IPv6Network ValueError
Возвращает объект или в зависимости от IP-адреса, переданного в качестве аргумента. address является строкой или целым числом, представляющим IP-сеть. Могут поставляться либо сети IPv4, либо сети IPv6; целые числа меньше 2**32 по умолчанию будет считаться IPv4. strict передаются конструктору или. Поднимается, если address не является допустимым адресом IPv4 или IPv6 или если в сети установлены биты узла.

IPv4Interface IPv6Interface ValueError
Возвращает объект или в зависимости от IP-адреса, переданного в качестве аргумента. address является строкой или целым числом, представляющим IP-адрес. Могут быть указаны либо IPv4, либо IPv6 адреса; целые числа меньше 2**32 будут считаться IPv4 по умолчанию. Поднимается, если address не является допустимым адресом IPv4 или IPv6.

ЧИТАТЬ ТАКЖЕ:  Оператор or в Python: что это такое и как работает

Одним из недостатков этих удобных функций является то, что необходимость обработки как IPv4, так и IPv6 форматов означает, что сообщения об ошибках предоставляют минимальную информацию о точной ошибке, так как функции не знают, был ли предназначен формат IPv4 или IPv6. Более подробные отчеты об ошибках можно получить, непосредственно вызвав соответствующие конструкторы классов, зависящие от версии.

Операции с объектами IP-адреса, сети и интерфейса.

Всё о решении - изображение номер семь
Всё о решении — изображение номер семь

И так, есть объект IPv(4/6) IP-адреса, сети или интерфейса, и вероятно, необходимо получить информацию о нем. Модуль ipaddress делает это простым и интуитивно понятным.

Получение сетевой маски (т. е. установки битов, соответствующих префиксу сети) или маски хоста (любых битов, не являющихся частью сетевой маски):

>>> net4 = ipaddress.ip_network(‘192.0.2.0/24’) >>> # IPv4Address(‘255.255.255.0’) >>> # IPv4Address(‘0.0.0.255’) >>> net6 = ipaddress.ip_network(‘2001:db8::0/96’) >>> # IPv6Address(‘ffff:ffff:ffff:ffff:ffff:ffff::’) >>> # IPv6Address(‘::ffff:ffff’)

Хотя IPv4 не поддерживает расширение или сжатие, связанные объекты по-прежнему предоставляют соответствующие свойства, поэтому нейтральный по версии код может легко гарантировать, что для адресов IPv6 используется наиболее краткая или самая подробная форма, при этом адреса IPv4, так же обрабатывая правильно.

Объект сети как список IP-адресов.

Finding - изображение номер восемь
Finding — изображение номер восемь

Полезное свойство модуля, это предоставление объекта сети как списка адресов. Это означает, что их можно индексировать следующим образом:

>>> net4 = ipaddress.ip_network(‘192.0.2.0/24’) >>> net4[1] # IPv4Address(‘192.0.2.1’) >>> net4[-1] # IPv4Address(‘192.0.2.255’) >>> net6 = ipaddress.ip_network(‘2001:db8::0/96’) >>> net6[1] # IPv6Address(‘2001:db8::1’) >>> net6[-1] # IPv6Address(‘2001:db8::ffff:ffff’)

Сравнение IP-адресов.

How - изображение номер девять
How — изображение номер девять

Модуль ipaddress предоставляет несколько простых, интуитивно понятных способов сравнения объектов, где это имеет смысл:

Если производится попытка сравнить объекты разных версий или разных типов, то возникает исключение TypeError.

Преобразование объекта IP-адреса в строку и число.

85 - изображение номер десять
85 — изображение номер десять

Другие модули, использующие IP-адреса (например, socket), обычно не принимают объекты IP-адреса напрямую. Следовательно они должны быть приведены к целому числу или строке, которые примет другой модуль:

Информация при сбое создания экземпляра.

How can - изображение номер одиннадцать
How can — изображение номер одиннадцать

При создании объектов адреса, сети или интерфейса с использованием фабричных функций, не зависящих от версии протокола, любые ошибки будут генерировать исключение ValueError с общим сообщением об ошибке (переданное значение не было распознано как объект этого типа).

Конструкторы классов, имеющих в названии конкретный протокол, при ошибках создания объекта вызывают исключения и и точно указывают, какую часть определения не удалось правильно проанализировать

Сообщения об ошибках значительно более детализированы при прямом использовании конструкторов классов. Например:

>>> ipaddress.ip_address(«192.168.0.256») # Traceback (most recent call last): #… # ValueError: ‘192.168.0.256’ does not appear to be an IPv4 or IPv6 address >>> ipaddress.IPv4Address(«192.168.0.256») # Traceback (most recent call last): #… #: Octet 256 (> 255) not permitted in ‘192.168.0.256’ >>> ipaddress.ip_network(«192.168.0.1/64») # Traceback (most recent call last): #… # ValueError: ‘192.168.0.1/64′ does not appear to be an IPv4 or IPv6 network >>> ipaddress.IPv4Network(«192.168.0.1/64») # Traceback (most recent call last): #… #: ’64’ is not a valid netmask

Оба специфичных для модуля исключения имеют ValueError в качестве родительского класса, поэтому, если не беспокоит конкретный тип ошибки, все равно можно написать код, подобный следующему:

try: network = ipaddress.IPv4Network(address) except ValueError: print(‘address/netmask is invalid for IPv4:’, address)

Создание и использование IPv4 и IPv6 объектов сетей

Python to find local - изображение номер двенадцать
Python to find local — изображение номер двенадцать

Объекты 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.

Сетевые объекты хешируются, поэтому их можно использовать в качестве ключей в словарях.

Синтаксис:

Python - изображение номер тринадцать
Python — изображение номер тринадцать

import ipaddress # для IP4-сети ipAddr = ipaddress.IPv4Network(address, strict=True) # для IP6-сети ipAddr = ipaddress.IPv6Network(address, strict=True)

ipaddress.IPv4Network:
  1. Строка, состоящая из IP-адреса и необязательной маски, разделенных косой чертой ‘/’. IP-адрес — это сетевой адрес, а маска может быть либо одним числом, что означает префикс, либо строковым представлением IPv4-адреса. В последнем случае маска интерпретируется как маска сети, если она начинается с ненулевого поля, или как маска хоста, если она начинается с нулевого поля, за единственным исключением полностью нулевой маски, которая рассматривается как чистая маска. Если маска не указана, то считается, что она равна /32.Например, следующие спецификации адреса эквивалентны: ‘192.168.1.0/24’, ‘192.168.1.0/255.255.255.0’ и ‘192.168.1.0/0.0.0.255’.
  2. Целое число, умещающееся на 32 бита, что эквивалентно сети с одним адресом и маской /32.
  3. Целое число, упакованное в байтовый объект длиной 4, с прямым порядком байтов. Интерпретация аналогична целочисленному адресу.
  4. Парный кортеж, состоящий из описания адреса и сетевой маски, где описание адреса является либо строкой, 32-битным целым числом, 4-байтовым упакованным целым числом, либо существующим объектом IPv4Address. А маска сети — это либо целое число, представляющее длину префикса (например, 24), либо строка, представляющая маску префикса (например, 255.255.255.0).

Строка, состоящая из 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’.

ЧИТАТЬ ТАКЖЕ:  Как подключиться к базе данных MySQL на Python: PyMySQL, установка и выполнение запросов

Целое число, умещающееся на 32 бита, что эквивалентно сети с одним адресом и маской /32.

Целое число, упакованное в байтовый объект длиной 4, с прямым порядком байтов. Интерпретация аналогична целочисленному адресу.

Парный кортеж, состоящий из описания адреса и сетевой маски, где описание адреса является либо строкой, 32-битным целым числом, 4-байтовым упакованным целым числом, либо существующим объектом IPv4Address. А маска сети — это либо целое число, представляющее длину префикса (например, 24), либо строка, представляющая маску префикса (например, 255.255.255.0).

Если не указано иное, то все сетевые методы, принимающие другие объекты сетей/адресов, будут вызывать исключение TypeError, если IP-версия аргумента несовместима с самим собой.

ipaddress.IPv6Network:
  1. Строка, состоящая из IP-адреса и необязательной длины префикса, разделенных косой чертой ‘/’. IP-адрес — это сетевой адрес, а длина префикса должна состоять из одного числа — префикса. Если длина префикса не указана, то считается, что она равна /128.Обратите внимание, что в настоящее время расширенные маски сети не поддерживаются. Это означает, что ‘2001:db00::0/24’ является допустимым аргументом, а ‘2001:db00::0/ffff:ff00::’ нет.
  2. Целое число, умещающееся на 128 бит, что эквивалентно сети с одним адресом и маской /128.
  3. Целое число, упакованное в байтовый объект длиной 16 с прямым порядком байтов. Интерпретация аналогична целочисленному адресу.
  4. Парный кортеж, состоящий из описания адреса и маски сети, где описание адреса является либо строкой, 128-битным целым числом, 16-байтовым упакованным целым числом, либо существующим объектом IPv6Address. Сетевая маска — это целое число, представляющее длину префикса.

Строка, состоящая из IP-адреса и необязательной длины префикса, разделенных косой чертой ‘/’. IP-адрес — это сетевой адрес, а длина префикса должна состоять из одного числа — префикса. Если длина префикса не указана, то считается, что она равна /128.

Обратите внимание, что в настоящее время расширенные маски сети не поддерживаются. Это означает, что ‘2001:db00::0/24’ является допустимым аргументом, а ‘2001:db00::0/ffff:ff00::’ нет.

Целое число, умещающееся на 128 бит, что эквивалентно сети с одним адресом и маской /128.

Целое число, упакованное в байтовый объект длиной 16 с прямым порядком байтов. Интерпретация аналогична целочисленному адресу.

Парный кортеж, состоящий из описания адреса и маски сети, где описание адреса является либо строкой, 128-битным целым числом, 16-байтовым упакованным целым числом, либо существующим объектом IPv6Address. Сетевая маска — это целое число, представляющее длину префикса.

  • если адрес не является допустимым адресом IPv4/IPv6 соответственно, то возникает ошибка AddressValueError.
  • если маска недопустима для IPv4/IPv6 адреса соответственно, то возникает ошибка NetmaskValueError.

Если аргумент strict=True и в предоставленном адресе установлены биты узла, то возникает ошибка ValueError. В противном случае биты хоста маскируются для определения подходящего сетевого адреса.

Атрибуты и методы объектов IPv4Network/IPv6Network:

Getting wrong local - изображение номер четырнадцать
Getting wrong local — изображение номер четырнадцать

Все атрибуты, реализованные объектами IP-адресов, также реализуются объектами сети. Кроме того, объекты сетей реализуют дополнительные атрибуты. Все они являются общими для IPv4Network и IPv6Network.

network.is_private:

IP - изображение номер пятнадцать
IP — изображение номер пятнадцать

Атрибут network.is_private возвращает True для сети, если она является частной.

Подробнее смотрите Iana-ipv4-special-registry (для IPv4) или iana-ipv6-special-registry (для IPv6).

network.is_unspecified:

Examples of using - изображение номер шестнадцать
Examples of using — изображение номер шестнадцать

Атрибут network.is_unspecified возвращает True для сети, если она является не уточненной.

network.is_reserved:

82 - изображение номер семнадцать
82 — изображение номер семнадцать

Атрибут network.is_reserved возвращает True для сети, если она НЕ зарезервирована IETF.

network.is_link_local:

PPT - изображение номер восемнадцать
PPT — изображение номер восемнадцать

Атрибут network.is_link_local возвращает True для сети в целом, если атрибуты верны как для сетевого адреса, так и для широковещательного адреса.

network.is_site_local:

1 - изображение номер девятнадцать
1 — изображение номер девятнадцать

Атрибут network.is_site_local только для IPv6-адресов возвращает True для сети в целом, если атрибуты верны как для сетевого адреса, так и для широковещательного адреса.

network.network_address:

Network - изображение номер двадцать
Network — изображение номер двадцать

Атрибут network.network_address возвращает сетевой адрес сети. Сетевой адрес и длина префикса вместе однозначно определяют сеть.

network.with_prefixlen:

14 - изображение номер двадцать один
14 — изображение номер двадцать один

Атрибут IPv4Network.with_prefixlen с возвращает строковое представление сети в десятичном формате с точками разделителями и маской в ​​префиксной записи, всегда совпадает с str(network) для адресов IPv4. Предоставление этого атрибута для IPv4Network упрощает написание кода, который может обрабатывать сети как IPv4, так и IPv6.

network.with_netmask:

87 - изображение номер двадцать два
87 — изображение номер двадцать два

Атрибут network.with_netmask возвращает строковое представление сети с маской в нотации маски сети.

network.with_hostmask:

Про модель - изображение номер двадцать три
Про модель — изображение номер двадцать три

Атрибут network.with_hostmask возвращает строковое представление сети с маской в нотации маски хоста.

network.address_exclude(network):

Solved - изображение номер двадцать четыре
Solved — изображение номер двадцать четыре

Метод network.address_exclude() вычисляет определения сети, полученные в результате удаления данной сети network из этой.

>>> 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’)]

network.compare_networks(other):

Networking - изображение номер двадцать пять
Networking — изображение номер двадцать пять

Метод network.compare_networks() сравнивает сеть network с другой other. В этом сравнении учитываются только сетевые адреса, а биты хоста — нет.

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

Не рекомендуется, начиная с Python 3.7: метод использует тот же алгоритм упорядочивания и сравнения, что и <, == и >.

Операции, поддерживаемые объектами IPv4Network/IPv6Network.

IPv4 и - изображение номер двадцать шесть
IPv4 и — изображение номер двадцать шесть

Объекты сетей поддерживают некоторые операции. Если не указано иное, то операции, приведенные ниже могут применяться только между совместимыми объектами (например, IPv4 с IPv4, IPv6 с IPv6).

Операции сравнения объектов сети:

Принципы работы компьютерных сетей 3 рус - изображение номер двадцать семь
Принципы работы компьютерных сетей 3 рус — изображение номер двадцать семь

Объекты сетей можно сравнить с обычным набором операторов сравнения. Сетевые объекты упорядочиваются сначала по сетевому адресу, затем по сетевой маске.

Перечисление всех адресов сети.

По объектам сети можно итерироваться. Такое поведение можно использовать, чтобы перечислить все адреса, принадлежащие сети. При итерации, возвращаются все хосты, включая неиспользуемые (для используемых хостов используйте метод ()).

>>> 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’)

Часто задаваемые вопросы о получении списка IP-адресов в сети с помощью Python

Вопрос: Как получить список всех IP-адресов в сети с помощью Python?
Ответ: Используйте модуль ipaddress. Создайте объект сети (например, IPv4Network(‘192.168.1.0/24’)) и преобразуйте его в список: list(network.hosts()).

Вопрос: Как получить только IP-адреса хостов, исключая адрес сети и широковещательный адрес?
Ответ: Используйте метод.hosts() объекта сети. Он возвращает итератор по всем адресам хостов, исключая сетевой и широковещательный.

Вопрос: Как перебрать все IP-адреса в сети в цикле?
Ответ: Используйте цикл for: for ip in IPv4Network(‘10.0.0.0/28’): print(ip).

Вопрос: Как проверить, принадлежит ли IP-адрес определенной сети?
Ответ: Используйте оператор in: IPv4Address(‘192.168.1.5’) in IPv4Network(‘192.168.1.0/24’).

Вопрос: Как получить маску подсети для сети?
Ответ: Используйте атрибут.netmask объекта сети: network.netmask.

Вопрос: Как преобразовать IP-адрес в целое число?
Ответ: Используйте int(IPv4Address(‘192.168.1.1’)).

Вопрос: Как создать сеть из строки с префиксом?
Ответ: Передайте строку в конструктор: IPv4Network(‘10.0.0.0/8’).

Вопрос: Как получить широковещательный адрес сети?
Ответ: Используйте атрибут.broadcast_address объекта сети.

Вопрос: Как разделить сеть на подсети?
Ответ: Используйте метод.subnets() объекта сети: list(network.subnets(prefixlen_diff=2)).

Вопрос: Как определить, является ли сеть частной?
Ответ: Используйте атрибут.is_private: network.is_private.