from ipaddress import * #подключение модуля для работы с IP-адресами
ip = ip_address(‘192.168.0.52’) #задание ip адреса
net = ip_network(‘198.168.0.0/255.255.255.192′)
ip_2 = f'{ip:b}’
print(ip_2) #вывод двоичного кода ip-адреса
print(len(list(net.hosts()))) #вывод количества IP-узлов (хостов) в сети, не включая адрес сети и широковещательный адрес
print(net.num_addresses) #вывод количество IP-адресов в сети (для заданных IP-сети и маски) с учетом адреса сети и широковещательного адреса
print(net.netmask) #вывод маски
print(net.network_address) #вывод сети
print(int(ip_address(‘198.168.0.52’)) — int(ip_address(‘198.168.0.0’))) #вывод номера устройства в сети

В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240. Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна? В ответе укажите только число.

Показать решение

from ipaddress import *
net = ip_network('192.168.32.160/255.255.255.240')
count = 0
for ip in net:
    if f'{ip:b}'.count('1') % 2 == 0:
        count += 1
print(count)

Ответ:8