import ipaddress
# Данные из условия
ip_address = "196.138.142.89" # IP-адрес узла
number_of_addresses = 78 # Количество адресов в сети, включая узловые
# Определение маски подсети на основании количества адресов
# Количество бит (единиц) для маски: 32 - log2(число адресов в сети), округленное вверх
def calculate_subnet_mask_length(num_addresses):
import math
return 32 - int(math.ceil(math.log2(num_addresses)))
# Вычислим количество единиц в маске подсети
mask_length = calculate_subnet_mask_length(number_of_addresses)
# Создаём сеть с шаблоном IP/maskLength
network = ipaddress.ip_network(f"{ip_address}/{mask_length}", strict=False)
# Вывод результатов
print(f"IP-адрес узла: {ip_address}")
print(f"Количество адресов в сети: {number_of_addresses}")
print(f"Маска подсети в CIDR: /{mask_length}")
print(f"Маска подсети: {network.netmask}")
print(f"Количество единиц в двоичной записи маски: {mask_length}")
print(f"Адрес сети: {network.network_address}")
print(f"Диапазон адресов в сети: {network[0]} - {network[-1]}")