Задача #1656
Компьютерные сети
(М. Ишимов) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть, в которой содержится узел с IP-адресом 246.51.128.202, задана маской сети 255.255..0, где - некоторое допустимое для записи маски число. Определите минимальное значение , для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество нулей в левых двух байтах не более суммарного количества нулей в правых двух байтах.
В ответе укажите только число.
Войдите, чтобы история ответов и статистика сохранялись.
Решение
Ответ
254
from ipaddress import *
from fnmatch import *
ip = ip_address('246.51.128.202')
for mask in range(33):
network = ip_network(f'{ip}/{mask}', 0)
if fnmatch(str(network.netmask), '255.255.*.0'):
if ip not in [network.network_address, network.broadcast_address]:
if all(f'{ip:b}'[:16].count('0') <= f'{ip:b}'[16:].count('0')
for ip in network):
print(network.netmask)