В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 172.16.128.0 и маской сети 255.255.192.0.
В ответе укажите только число.
Решение:
|
|
from ipaddress import * k=0 net=ip_network('172.16.128.0/255.255.192.0') for i in net: if bin(int(i))[2:].count('1')%2!=0: k=k+1 print(k) |
Объяснение кода:
- Импортирование модуля
ipaddress:
Импортируем все функции из модуля ipaddress, который предоставляет возможность работы с IP-адресами и сетями.
- Инициализация счетчика:
Инициализируем счетчик k для подсчета подходящих IP-адресов.
- Определение сети:
|
|
net = ip_network('172.16.128.0/255.255.192.0') |
Создаем объект сети net с IP-адресом 172.16.128.0 и маской 255.255.192.0.
- Перебор всех IP-адресов в сети:
|
|
for i in net: if bin(int(i))[2:].count('1') % 2 != 0: k = k + 1 |
Перебираем все IP-адреса в сети net:
bin(int(i))[2:].count('1'): Преобразуем IP-адрес в целое число, затем в двоичную строку (без префикса ‘0b’), и считаем количество единиц.
% 2 != 0: Проверяем, является ли количество единиц нечетным.
- Если количество единиц нечетное, увеличиваем счетчик
k на 1.
- Вывод результата:
Выводим значение счетчика k, которое показывает количество подходящих IP-адресов.
Итог:
Этот код перебирает все IP-адреса в заданной сети, проверяет, является ли количество единиц в двоичной записи каждого адреса нечетным, и подсчитывает количество таких адресов.
Ответ: 8192