Задание 10 ЕГЭ: адрес сети, широковещательный адрес, сколько в сети адресов с нужным числом единиц и какой может быть маска
from ipaddress import *
net = ip_network('192.168.159.86/255.255.252.0', 0)
print(net[0]) # адрес сети: 192.168.156.0
print(net[-1]) # широковещательный: 192.168.159.255
print(net[-2]) # наибольший для ПК: 192.168.159.254
print(net[1]) # наименьший для ПК: 192.168.156.1
Второй аргумент 0 разрешает писать адрес любого узла сети,
а не только адрес самой сети. Маску можно писать четырьмя числами
(/255.255.252.0) или числом единиц (/22).
a = net[0]
s = 0
for x in str(a).split('.'): # четыре числа адреса
s += int(x)
print(s) # 192 + 168 + 156 + 0 = 516
print(str(a).replace('.', '')) # 1921681560
c = 0
for ip in net: # все адреса сети по очереди
if f'{ip:b}'.count('1') % 5 != 0: # f'{ip:b}' — 32 двоичные цифры
c += 1
print(c)
Левые два байта — f'{ip:b}'[:16], правые —
f'{ip:b}'[16:].
x = ip_address('192.75.64.98')
for m in range(33): # m — единиц в маске
net = ip_network(f'{x}/{m}', 0)
if net[0] == ip_address('192.75.64.0'):
print(m) # первое подходящее — наименьшее
break
| В условии | В программе |
|---|---|
| адрес сети · широковещательный | net[0] · net[-1] |
| наибольший адрес, который можно назначить компьютеру | net[-2] |
| сумма числовых значений октетов | цикл по str(a).split('.') |
| без разделителей | str(a).replace('.', '') |
| количество единиц кратно 5 · не кратно 5 | % 5 == 0 · % 5 != 0 |
| узлы в разных сетях · в одной сети | a != b · y in net |
| наименьшее m · наибольшее m | print(m) и break · last = m, после цикла print(last) |
| служебные адреса узлам не назначают | x not in (a[0], a[-1]) |
net[0];net[-1] — широковещательный,
компьютеру его не дают; наибольший для компьютера — net[-2];m;
нулей в ней 32 − m.Задание 10 ЕГЭ: адрес сети, широковещательный адрес, сколько в сети адресов с нужным числом единиц и какой может быть маска
from ipaddress import *
net = ip_network('192.168.159.86/255.255.252.0', 0)
print(net[0]) # адрес сети: 192.168.156.0
print(net[-1]) # широковещательный: 192.168.159.255
print(net[-2]) # наибольший для ПК: 192.168.159.254
print(net[1]) # наименьший для ПК: 192.168.156.1
Второй аргумент 0 разрешает писать адрес любого узла сети,
а не только адрес самой сети. Маску можно писать четырьмя числами
(/255.255.252.0) или числом единиц (/22).
a = net[0]
s = 0
for x in str(a).split('.'): # четыре числа адреса
s += int(x)
print(s) # 192 + 168 + 156 + 0 = 516
print(str(a).replace('.', '')) # 1921681560
c = 0
for ip in net: # все адреса сети по очереди
if f'{ip:b}'.count('1') % 5 != 0: # f'{ip:b}' — 32 двоичные цифры
c += 1
print(c)
Левые два байта — f'{ip:b}'[:16], правые —
f'{ip:b}'[16:].
x = ip_address('192.75.64.98')
for m in range(33): # m — единиц в маске
net = ip_network(f'{x}/{m}', 0)
if net[0] == ip_address('192.75.64.0'):
print(m) # первое подходящее — наименьшее
break
| В условии | В программе |
|---|---|
| адрес сети · широковещательный | net[0] · net[-1] |
| наибольший адрес, который можно назначить компьютеру | net[-2] |
| сумма числовых значений октетов | цикл по str(a).split('.') |
| без разделителей | str(a).replace('.', '') |
| количество единиц кратно 5 · не кратно 5 | % 5 == 0 · % 5 != 0 |
| узлы в разных сетях · в одной сети | a != b · y in net |
| наименьшее m · наибольшее m | print(m) и break · last = m, после цикла print(last) |
| служебные адреса узлам не назначают | x not in (a[0], a[-1]) |
net[0];net[-1] — широковещательный,
компьютеру его не дают; наибольший для компьютера — net[-2];m;
нулей в ней 32 − m.