Условие: № 5911 (Уровень: Средний)
• Статья подготовлена командой itpy
• Полный разбор задачи в Telegram
🚩 Условие задачи:
Для узла с IP-адресом 224.128.112.142 адрес сети равен 224.128.96.0.
Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
🚩 Теоретическая справка:
Маска сети имеет длину 32 бита и вид 1111..000 (сначала единицы, потом нули). Поэтому мы можем перебрать ее значения через for mask in range(32+1):
👩💻 Код решения:
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'224.128.112.142/{mask}', 0)
if str(net) == f'224.128.96.0/{mask}':
print(str(net.netmask).split('.')[2])
👩💻 Комментарии к коду:
1. from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
2. Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).
3. net = ip_network(f'224.128.112.142/{mask}', 0)
Создание объекта сети net с заданным IP-адресом и переменной маской подсети, где последний аргумент указывает на коррекцию префикса.
4. if str(net) == f'224.128.96.0/{mask}':
Условие проверки соответствия адреса сети определенному значению.
5. print(str(net.netmask).split('.')[2])
Вывод третьего октета маски подсети из объекта сети net, если условие выполнено.