Similar presentations:
IP-адреса маски и узлы сети №13
1.
IP -адреса маски и узлы сети№13
2.
пошагово разберём первую задачу1
В терминологии сетей TCP/IP маской сети называют двоичное число, которое
показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 172.16.128.0 и маской сети 255.255.192.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи
IP-адреса не кратно 2?
В ответе укажите только число.
3.
1) Сначала импортируем все модули из библиотеки с IP-адресами:from ipaddress import *
4.
2) Задаём сеть:from ipaddress import *
net = ip_network('172.16.128.0/255.255.192.0', 0)
5.
3) Создаём переменную, которая будет считать количество подходящих адресов иначинаем перебирать их в заданной сети:
from ipaddress import *
net = ip_network('172.16.128.0/255.255.192.0', 0)
counter = 0
for ip in net:
6.
4) Переводим адрес в двоичную СС, с помощью функции f’{ip:b}’, проверяемколичество единиц, если всё удовлетворяет условию, то считаем такой адрес:
from ipaddress import *
net = ip_network('172.16.128.0/255.255.192.0', 0)
counter = 0
for ip in net:
if f'{ip:b}'.count('1') % 2 != 0:
counter += 1
7.
5) Переводим адрес в двоичную СС, с помощью функции f’{ip:b}’, проверяемколичество единиц, если всё удовлетворяет условию, то считаем такой адрес:
from ipaddress import *
net = ip_network('172.16.128.0/255.255.192.0', 0)
counter = 0
for ip in net:
if f'{ip:b}'.count('1') % 2 != 0:
counter += 1
print(counter)
ответ
8192
8.
простые задачи:2
3
4
средняя
сложность:
7
5 6
8
сложные задачи:
11
12
13
9
10
9.
Ещё один номер пройден!10.
2В терминологии сетей TCP /IP маской сети называют двоичное число, которое
показывает, какая часть IP -адреса узла сети относится к адресу сети, а какая - к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и маске сети.
Для узла с IP -адресом 205.1 54.21 2.20 адрес сети равен 205.1 54.1 92.0. Чему
равно наибольшее возможное значение третьего слева байта маски?
Ответ запишите в виде десятичного числа.
пояснение
ответ
224
11.
2from ipaddress import *
for mask in range(33):
net =
ip_network(f'205.154.212.20/{mask}', 0)
print(net, net.netmask)
Получили 192 и 224, в ответ
максимальное.
12.
3В терминологии сетей TCP /IP маска сети – это двоичное число, меньшее 232; в
маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места
нули. Маска определяет, какая часть IP -адреса узла сети относится к адресу сети,
а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же
правилам, что и IP -адрес – в виде четырёх байт, причём каждый байт
записывается в виде десятичного числа. Адрес сети получается в результате
применения поразрядной конъюнкции к заданному IP -адресу узла и маске.
Для узла с IP -адресом 76.1 55.48.2 адрес сети равен 76.1 55.48.0. Для скольких
различных значений маски это возможно?
пояснение
11
ответ
13.
3from ipaddress import *
for mask in range(33):
net = ip_network(f'76.155.48.2/{mask}', 0)
print(net)
Получили 11 результатов.
14.
4В терминологии сетей TCP /IP маска сети – это двоичное число, меньшее 232; в
маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места
нули. Маска определяет, какая часть IP -адреса узла сети относится к адресу сети, а
какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же
правилам, что и IP -адрес – в виде четырёх байт, причём каждый байт записывается
в виде десятичного числа. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному IP -адресу узла и маске.
Для некоторой подсети используется маска 255.255.255.1 28. Сколько различных
адресов компьютеров теоретически допускает эта маска, если два адреса (адрес
сети и широковещательный) не используют?
пояснение
ответ
1 26
15.
4from ipaddress import *
net = ip_network('0.0.0.0/255.255.255.128', 0)
# num_addresses выводит количество адресов внутри сети
print(net.num_addresses - 2)
16.
5В терминологии сетей TCP /IP маской сети называют двоичное число, которое
показывает, какая часть IP -адреса узла сети относится к адресу сети, а какая - к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и его маске.
Два узла, находящиеся в разных подсетях, имеют IP -адреса 1 57.1 27.1 72.56 и
1 57.1 27.1 91 .78. Известно, что в масках обеих подсетей содержится одинаковое
количество единиц. Определите наименьшее возможное количество единиц в
масках этих подсетей.
В ответе укажите только число.
пояснение
20
ответ
17.
5from ipaddress import *
for mask in range(33):
net1 = ip_network(f'157.127.172.56/{mask}', 0)
net2 = ip_network(f'157.127.191.78/{mask}', 0)
if net1 != net2:
print(mask)
break
18.
6В терминологии сетей TCP /IP маской сети называют двоичное число, которое
показывает, какая часть IP -адреса узла сети относится к адресу сети, а какая – к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP -адресом 1 23.222.1 1 1 .1 92 и маской сети 255.255.255.248. Сколько
в этой сети IP -адресов, для которых количество нулей в двоичной записи
четвертого байта IP -адреса не делится без остатка на 3? В ответе укажите только
число.
пояснение
6
ответ
19.
6from ipaddress import *
counter = 0
net = ip_network('123.222.111.192/255.255.255.248', 0)
for ip in net:
if f'{ip:b}'[-8:].count('0') % 3 != 0:
counter += 1
print(counter)
20.
7В терминологии сетей TCP /IP маска сети – это двоичное число, меньшее 232; в
маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места
нули. Маска определяет, какая часть IP -адреса узла сети относится к адресу сети, а
какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же
правилам, что и IP -адрес – в виде четырёх байт, причём каждый байт записывается
в виде десятичного числа. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному IP -адресу узла и маске.
Для узла c IP -адресом 1 75.1 22.80.1 3 адрес подсети равен 1 75.1 22.80.0. Сколько
существует различных возможных значений маски, если известно, что в этой сети не
менее 60 узлов? Ответ запишите в виде десятичного числа.
пояснение
ответ
7
21.
7from ipaddress import *
for mask in range(33):
net = ip_network(f'172.122.80.13/{mask}', 0)
if net.num_addresses >= 60:
print(net)
Получили 7 результатов.
22.
8В терминологии сетей TCP /IP маской сети называют двоичное число, которое
показывает, какая часть IP -адреса узла сети относится к адресу сети, а какая – к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и его маске.
Сеть задана IP -адресом 21 1 .46.0.0 и сетевой маской 255.255.1 28.0. Сколько в этой
сети IP -адресов, для которых количество единиц в двоичной записи IP -адреса
кратно 4, а сами адреса в двоичном виде заканчиваются на 1 1 ?
В ответе укажите только число.
пояснение
ответ
201 6
23.
8from ipaddress import *
counter = 0
net = ip_network('211.46.0.0/255.255.128.0', 0)
for ip in net:
b = f'{ip:b}'
if b.count('1') % 4 == 0 and b[-2:] == '11':
counter += 1
print(counter)
24.
9В терминологии сетей TCP /IP маской сети называется двоичное число,
определяющее, какая часть IP -адреса узла сети относится к адресу сети, а какая – к
адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят
единицы, а затем с некоторого места – нули. Адрес сети получается в результате
применения поразрядной конъюнкции к заданному IP -адресу узла и
маске. Например, если IP -адрес узла равен 231 .32.255.1 31 , а маска 255.255.240.0, то
адрес сети равен 231 .32.240.0.
Узел с IP -адресом 1 43.1 31 .21 1 .37 принадлежит сети, в которой 1 5 IP -адресов,
двоичная запись которых содержит ровно 1 0 единиц.
Сколько единиц содержится в двоичной записи маски этой сети?
пояснение
ответ
17
25.
9from ipaddress import *
for mask in range(33):
net = ip_network(f'143.131.211.37/{mask}', 0)
counter = 0
for ip in net:
if f'{ip:b}'.count('1') == 10:
counter += 1
if counter > 15: # обязательно для оптимизации кода
break
if counter == 15:
print(mask)
26.
10
В терминологии сетей TCP /IP маска сети – это двоичное число, меньшее 2^32; в
маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места
нули.
Маска определяет, какая часть IP -адреса узла сети относится к адресу сети, а какая
– к адресу самого узла в этой сети. Обычно маска записывается по тем же
правилам, что и IP -адрес – в виде четырёх байт, причём каждый байт записывается
в виде десятичного числа. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному IP -адресу узла и маске.
Например, если IP -адрес узла равен 1 31 .32.255.1 31 , а маска равна 255.255.240.0, то
адрес сети равен 1 31 .32.240.0.
Два узла, находящиеся в одной сети, имеют IP -адреса 1 1 2.1 1 7.1 07.70 и
1 1 2.1 1 7.1 21 .80. Укажите наименьшее возможное количество адресов в этой сети.
пояснение
81 92
ответ
27.
10
from ipaddress import *
res = 10 ** 20
for mask in range(33):
net1 = ip_network(f'112.117.107.70/{mask}', 0)
net2 = ip_network(f'112.117.121.80/{mask}', 0)
if net1 == net2:
res = min(res, net1.num_addresses)
print(res)
28.
11В терминологии сетей TCP /IP маска сети – это двоичное число, меньшее 232; в
маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места
нули. Маска определяет, какая часть IP -адреса узла сети относится к адресу сети, а
какая – к адресу самого узла в этой сети.
Обычно маска записывается по тем же правилам, что и IP -адрес – в виде четырёх
байт, причём каждый байт записывается в виде десятичного числа. Адрес сети
получается в результате применения поразрядной конъюнкции к заданному IP адресу узла и маске.
Например, если IP -адрес узла равен 1 31 .32.255.1 31 , а маска равна 255.255.240.0, то
адрес сети равен 1 31 .32.240.0.
Е сли маска подсети 255.255.255.248 и IP -адрес компьютера в сети 1 56.1 28.0.227, то
номер компьютера в сети равен _ _ _
пояснение
3
ответ
29.
11Выводим адрес сети:
from ipaddress import *
net = ip_network('156.128.0.227/255.255.255.248', 0)
print(net)
Находим IP компьютера и IP сети и вычитаем их, получаем номер компьютера
в сети:
from ipaddress import *
ip1 = ip_address('156.128.0.227')
ip2 = ip_address('156.128.0.224')
print(int(ip1) - int(ip2))
30.
12
В терминологии сетей TCP /IP маской сети называют двоичное число, которое
показывает, какая часть IP -адреса узла сети относится к адресу сети, а какая – к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP адресом 1 72.1 6.1 68.0 и маской сети 255.255.255.X.
Определите значение Х, если известно, что в этой сети ровно 35 адресов, в которых
количество нулей кратно 7. В ответе запишите число в 1 0 системе счисления.
пояснение
1 28
ответ
31.
12
try, except связанные между собой операторы. try пытается выполнить свой блок кода, если в нём
нет ошибок, то он полностью выполняется, если этот код не может быть выполнен, из-за наличия
ошибки, то программа переходит в блок except.
В данной задаче нам неизвестен байт маски, так как не все числа могут стоять на месте x для
формирования сети.
С помощью try, except мы будем проверять возможно ли создать сеть с определенным иксом. Если
можно, то мы продолжаем решать задачу, находим кол-во нулей в адресах внутри сети, если же
такую сеть сформировать нельзя и программа выдаёт ошибку, то переходим в except и просто
пропускаем такой x.
from ipaddress import *
for x in range(256):
try:
net = ip_network(f'172.16.168.0/255.255.255.{x}', 0)
counter = 0
for ip in net:
if f'{ip:b}'.count('0') % 7 == 0:
counter += 1
if counter == 35:
print(x)
except:
pass
32.
13
В терминологии сетей TCP /IP маской сети называют двоичное число, которое
показывает, какая часть IP -адреса узла сети относится к адресу сети, а какая – к
адресу узла в этой сети. Адрес сети получается в результате применения
поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть, в которой содержится узел с IP -адресом 1 52.65.245.1 32, задана маской сети
255.255.A.0, где A - некоторое допустимое для записи маски число. Определите
минимальное значение A, для которого для всех IP -адресов этой сети в двоичной
записи IP -адреса суммарное количество нулей в левых двух байтах не менее
суммарного количества нулей в правых двух байтах.
В ответе укажите только число.
пояснение
252
ответ
33.
12
try, except связанные между собой операторы. try пытается выполнить свой блок кода, если в нём
нет ошибок, то он полностью выполняется, если этот код не может быть выполнен, из-за наличия
ошибки, то программа переходит в блок except.
В данной задаче нам неизвестен байт маски, так как не все числа могут стоять на месте a для
формирования сети.
С помощью try, except мы будем проверять возможно ли создать сеть с определенным a. Если
можно, то мы продолжаем решать задачу, если же такую сеть сформировать нельзя и программа
выдаёт ошибку, то переходим в except и просто пропускаем такой a.
from ipaddress import *
for a in range(256):
try:
net = ip_network(f'152.65.245.132/255.255.{a}.0', 0)
if all(f'{ip:b}'[:16].count('0') >= f'{ip:b}'[16:].count('0') for ip in net):
print(a)
break
except:
pass
internet