В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места — нули. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Известно, что в составе сети, которой принадлежит IP-адрес 149.238.225.115, есть узел, в IP-адресе которого первый байт совпадает с четвёртым, а второй — с третьим.
Укажите наименьшее возможное количество принадлежащих этой сети IP-адресов, в двоичной записи которых ровно
Запишем второй узел, в IP-адресе которого первый байт совпадает с четвёртым, а второй — с третьим: 149.238.238.149.
Выпишем двоичное представление IP-адресов:
149.238.225.115: 10010101.11101110.11100001.01110011,
149.238.238.149: 10010101.11101110.11101110.10010101.
Заметим, что IP-адреса различаются в третьем байте слева. Отличие
255.255.240.0: 11111111.11111111.11110000.00000000.
В части IP-адресов,
Наименьшее возможное количество принадлежащих этой сети IP-адресов, в двоичной записи которых ровно
Ответ: 66.
Примечание.
В маске после нуля идут только одни нули.
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network, ip_address
ipu = '149.238.225.115'
ipu_modified = '149.238.238.149'
for mask in range(32, 0, -1):
network = ip_network(f'{ipu}/{mask}', 0)
count = 0
if ip_address(ipu_modified) in network:
for ip in network:
if bin(int(ip)).count('1') == 15:
count += 1
if count > 0:
print(count)
break

