Форум » Адресация в Интернете » Р-11 (К. Поляков) » Ответить

Р-11 (К. Поляков)

Anna1915: Два узла, находящиеся в разных подсетях, имеют IP-адреса 192.168.106.35 и 192.168.106.117. В масках обеих подсетей одинаковое количество единиц. Укажите наименьшее и наибольшее возможное количество единиц в масках этих подсетей. Учтите, что два адреса в любой подсети зарезервированы: адрес всей подсети и широковещательный адрес. Можно ли эту задачу решить так, правильная ли логика? [pre2] from ipaddress import * ip1=IPv4Address('192.168.106.35') ip2=IPv4Address('192.168.106.117') mini=33 maxi=-1 for mask in range(33): net1=IPv4Network(f'{ip1}/{mask}',0) net2=IPv4Network(f'{ip2}/{mask}',0) if ip1 not in net2 and ip2 not in net1: if net1.network_address<ip1<net1.broadcast_address and net2.network_address<ip2<net2.broadcast_address: d1=f'{net1.netmask:b}' d2=f'{net2.netmask:b}' if d1.count('1')==d2.count('1'): if d1.count('1')<mini: mini=d1.count('1') if d1.count('1')>maxi: maxi=d1.count('1') print(mini,maxi) [/pre2]

Ответов - 1

Ж: Ваш код у меня не запустился... Я решаю эти задачи глазами: adres='192.168.106.35'; print( [ bin(int(ip))[2::].zfill(8) for ip in adres.split('.') ] ) adres='192.168.106.117'; print( [ bin(int(ip))[2::].zfill(8) for ip in adres.split('.') ] ) >>> ['11000000', '10101000', '01101010', '00100011'] ['11000000', '10101000', '01101010', '01110101'] Чтобы узлы были из разных сетей маска д.б. не менее 26, иначе сети буду идентичны ['11000000', '10101000', '01101010', '00100011'] ['11000000', '10101000', '01101010', '01110101'] максимальная маска 29, т.к. иначе один из Ip станет широковещательным ['11000000', '10101000', '01101010', '00100011'] ['11000000', '10101000', '01101010', '01110101']



полная версия страницы