В терминологии сетей TCP/IP маской сети называется 32-разрядная двоичная последовательность, определяющая, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули.
Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. Обычно маска записывается по тем же правилам, что и IP-адрес, — в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа.
Пример. Пусть IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0. Тогда адрес сети равен 231.32.240.0.
Для узла с IP-адресом 227.138.127.144 адрес сети равен 227.138.64.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
12710 = 0111 11112.
06410 = 0100 00002.
Заметим, что в маске во втором бите слева должна стоять единица, а в третьем бите слева — ноль. И так как мы знаем про маски, что в них сначала идут единицы, а потом нули, то получаем, что третий слева байт равен 110000002 = 19210.
Ответ: 192.
Приведём решение Масиса Давояна на языке Python.
from ipaddress import *
for mask in range(33):
net = ip_network(f'227.138.127.144/{mask}', 0)
if str(net)[:-3] == '227.138.64.0':
print(net.netmask)

