# -*- coding: utf-8 -*-
'''
Задание 5.2a

Всё, как в задании 5.2, но, если пользователь ввел адрес хоста, а не адрес сети,
надо преобразовать адрес хоста в адрес сети и вывести адрес сети и маску, как в задании 5.2.

Пример адреса сети (все биты хостовой части равны нулю):
* 10.0.1.0/24
* 190.1.0.0/16

Пример адреса хоста:
* 10.0.1.1/24 - хост из сети 10.0.1.0/24
* 10.0.5.1/30 - хост из сети 10.0.5.0/30

Если пользователь ввел адрес 10.0.1.1/24,
вывод должен быть таким:

Network:
10        0         1         0
00001010  00000000  00000001  00000000

Mask:
/24
255       255       255       0
11111111  11111111  11111111  00000000

Проверить работу скрипта на разных комбинациях сеть/маска.

Ограничение: Все задания надо выполнять используя только пройденные темы.

'''
ip = input("Введите IP адрес в формате ip/mask: ")
templ = """
Network:
{0:<8} {1:<8} {2:<8} {3:<8}
{0:08b} {1:08b} {2:08b} {3:08b}

Mask:
/{4}
{5:<8} {6:<8} {7:<8} {8:<8}
{5:08b} {6:08b} {7:08b} {8:08b}

"""
ip,mask = ip.split('/')
ip1,ip2,ip3,ip4 = ip.split('.')
mask_hex = '{:08x}'.format(0x100000000-2**(32-int(mask)))
ip_hex = '{:02x}{:02x}{:02x}{:02x}'.format(int(ip1),int(ip2),int(ip3),int(ip4))
ip = '{:08x}'.format(int(ip_hex,16) & int('0x'+mask_hex,16))
ip1,ip2,ip3,ip4 = [(ip[i:i+2]) for i in range(0,len(ip_hex),2)]
mask1,mask2,mask3,mask4 = [(mask_hex[i:i+2]) for i in range(0,len(mask_hex),2)]
print(templ.format(int(ip1,16),int(ip2,16),int(ip3,16),int(ip4,16),mask,int(mask1,16),int(mask2,16),int(mask3,16),int(mask4,16)))

