IP-адресация
Интернет является сетью сетей, система IP-адресации учитывает эту структуру. Каждый компьютер в сети получает свой уникальный IP-адрес, который представляет собой 32-битный идентификатор. В большинстве случаев используется более удобная запись IP-адреса в виде четырёх разделённых точками десятичных чисел – от 0 до 255, например: 231.142.19.30.
![]() |
IP-адрес состоит из двух частей, одна из которых определяет адрес сети, а вторая – адрес самого узла в этой сети. Деление адреса на части определяется маской – 32-битным числом, в двоичной записи которого сначала стоят единицы, а потом — нули, например: 255.255.224.0
Например,
| IP-адрес | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | . | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | . | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | . | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
| Маска | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | . | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | . | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | . | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Первая часть IP-адреса, соответствующая единичным битам маски, относится к адресу сети. Вторая часть IP-адреса, соответствующая нулевым битам маски, определяет числовой адрес узла в сети. Для определения адреса сети выполняется операция поразрядной конъюнкции между IP-адресом и маской подсети.
Маску также можно представить через суммарное число единиц в маске. В нашем примере, маска 255. 255. 224.0 содержит 19 единиц (число 255 — это 8 единиц, число 224 — это три единицы). В этом случае пишут: 231.142.19.30/19.
Адрес сети — это IP-адрес, у которого в части, отведенной для адреса узла (определяемой маской подсети), все биты равны 0. Адрес сети идентифицирует саму сеть, а не какое-либо конкретное устройство в ней.
| IP-адрес | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | . | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | . | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | . | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
| Маска | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | . | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | . | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | . | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Адрес сети | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | . | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | . | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | . | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Широковещательный адрес — это специальный IP-адрес, который используется для отправки данных всем устройствам в конкретной сети. У широковещательного адреса в части, отведенной для адреса узла, все биты равны 1. Для определения широковещательного адреса выполняется поразрядная дизъюнкция между адресом сети и инвертированной маской подсети.
Модуль ipaddress
Модуль ipaddress, доступный в стандартной библиотеке Python с версии 3.3, предназначен для удобной работы с IPv4 и IPv6 адресами и сетями. Он предоставляет функционал для их создания, модификации и выполнения операций.
Подключение модуля: from ipaddress import *
Основные функции модуля
ipaddress.ip_address (address) создает объект IP-адреса (IPv4 или IPv6) из строки или числа. Числовые адреса до 232 по умолчанию считаются IPv4, более крупные – IPv6.
ipaddress.ip_network (address, strict=True) создает объект сети (IPv4/IPv6) из строки или числа address. По умолчанию (strict=True), проверяется, что address является адресом сети (биты хоста равны нулю), иначе — ошибка. При strict=False адрес сети вычисляется автоматически.
ipaddress.broadcast_address — возвращает широковещательный адрес для сети. Пакеты, отправленные по этому адресу, должны быть получены каждым хостом в сети.
Метод hosts() возвращает итератор всех используемых адресов в сети (без адреса сети и широковещательного адреса).
Атрибут num_addresses возвращает количество адресов в сети. Включает все адреса в сети, как сетевой адрес, так и широковещательный адрес. Например: для сети 192.168.1.0/24, будет ответ 256.
| Задание 13. Организация компьютерных сетей. Адресация (демо-версия 2026)
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств. Сеть задана IP-адресом одного из входящих в неё узлов 191.128.66.83 и сетевой маской 255.192.0.0. Найдите в данной сети наибольший IP-адрес, который может быть назначен компьютеру. В ответе укажите найденный IP-адрес без разделителей. Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать: 11122344. |
Решение и ответ from ipaddress import * print(net[-2]) #выводим предпоследний арес в сети Ответ: 191191255254 |
| Задание 13. Организация компьютерных сетей. Адресация (демо-версия 2025)
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 172.16.168.0 и маской сети 255.255.248.0. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 5? В ответе укажите только число. |
Решение и ответ from ipaddress import * k = 0 for ip in net: #перебираем адреса в сети print(k) Ответ: 1663 |
| Задание 13. Организация компьютерных сетей. Адресация (демо-версия 2024)
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240.Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна? В ответе укажите только число. |
Решение и ответ from ipaddress import * k = 0 for ip in net: #перебираем адреса в сети print(k) Ответ: 8 |
| Задание 13. Количество IP адресов по условию
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 142.108.56.118 и маской сети 255.255.255.240. Сколько в этой сети IР-адресов, для которых в двоичной записи IР-адреса суммарное количество единиц в левых двух байтах меньше суммарного количества единиц в правых двух байтах? В ответе укажите только число. |
Решение и ответ from ipaddress import *
net = ip_network('142.108.56.118/255.255.255.240', False) #находим сеть по адресу хоста и маске k = 0 print(k) Ответ: 5 |
| Задание 13. Количество IP адресов по условию
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 172.16.160.0 и маской сети 255.255.240.0 Сколько в этой сети IР-адресов, для которых количество единиц в их двоичной записи кратно двум? В ответе укажите только число. |
Решение и ответ from ipaddress import *
net = ip_network('172.16.160.0/255.255.240.0', False) #находим сеть по адресу хоста и маске k = 0 print(k) Ответ: 2048 |
| Задание 13. Поиск маски по адресу узла и сети
В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, – в виде четырёх байт, причём каждый байт записывается в виде десятичного числа. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Например, если IP-адрес узла равен 125.44.101.252, а маска равна 255.255.255.192, то адрес сети равен 125.44.101.192. Для узла с IP-адресом 244.55.229.28 адрес сети равен 244.0.0.0.Каково наибольшее возможное количество нулей в разрядах маски? |
Решение и ответ from ipaddress import *
for mask in range(1, 32): # Перебираем все возможные значения маски подсети net = ip_network('244.55.229.28/' + str(mask), 0)# Создаем объект сети для IP-адреса 244.55.229.28 с текущей маской
if '244.0.0.0' in str(net): # Проверка: есть ли строка '244.0.0.0' в строковом представлении сети print(net, net.netmask)# Если условие выполняется, выводим объект сети и маску сети Ответ: 26 |
| Задание 13. Поиск параметра А в адресе узла
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 64.129.А.10, где А – некоторое допустимое для записи IР-адреса число, и маской сети 255.255.252.0. Определите минимальное значение А, для которого для всех IP-адресов этой сети в двоичной записи IР-адреса суммарное количество единиц в левых двух байтах не более суммарного количества единиц в правых двух байтах? В ответе укажите только число. |
Решение и ответ from ipaddress import *
for A in range(256): #перебираем возможные значения параметра А for ip in net: if ok: #если для всех адресов этой сети условие выполняется, то выводим А и выходим из цикла Ответ: 28 |
|
Задание 13. Несовпадающие адреса в двух сетях В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. В первом здании сеть задана IP-адресом 192.168.56.192 и маской сети 255.255.255.192. А во втором здании сеть задана IP-адресом 192.168.56.208 и маской сети 255.255.255.240. Сколько ip-адресов не совпадут в этих сетях? |
Решение и ответ from ipaddress import *
net1 = ip_network('192.168.56.192/255.255.255.192', False) #находим адрес первой сети print (net1.num_addresses - net2.num_addresses) #находим несовпадающие адреса, так как вторая сеть находится внутри первой Ответ: 48 |

