Сеть задана IP-адресом одного из входящих в неё узлов 23.78.143.87 и сетевой маской 255.255.240.0.
Найдите количество IP-адресов в данной сети, у которых в двоичной записи суммарное количество ведущих нулей во всех четырёх байтах превышает 6.
Ведущие нули байта - это нули перед первой единицей в его двоичной записи.
Например, байт 00010101 имеет 3 ведущих нуля, а байт 00000000 - 8 ведущих нулей.
В ответе укажите количество найденных IP-адресов.
(В. Лашин) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла его маске.
Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы.
Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана IP-адресом одного из входящих в неё узлов 23.78.143.87 и сетевой маской 255.255.240.0.
Найдите количество IP-адресов в данной сети, у которых в двоичной записи суммарное количество ведущих нулей во всех четырёх байтах превышает 6.
Ведущие нули байта - это нули перед первой единицей в его двоичной записи.
Например, байт 00010101 имеет 3 ведущих нуля, а байт 00000000 - 8 ведущих нулей.
В ответе укажите количество найденных IP-адресов.
from ipaddress import *
net = ip_network('23.78.143.87/255.255.240.0', 0)
def leading_zeros_byte(value):
bits = f'{value:08b}'
if '1' not in bits:
return 8
return len(bits) - len(bits.lstrip('0'))
count = 0
for addr in range(int(net.network_address), int(net.broadcast_address) + 1):
ip_addr = ip_address(addr)
total = sum(leading_zeros_byte(b) for b in ip_addr.packed)
if total > 6:
count += 1
print(count)
📌 Результат: для каждого байта считаем ведущие нули перед первой единицей; суммируем по четырём октетам; если сумма > 6, адрес учитываем; ответ: 512.
Поверните телефон
Горизонтальный режим удобнее для таблицы и Python-кода