Например Блоки IP адресов:
00.206.4.0/23
00.206.4.0 — Это начальный IP адрес.
23 — это маска. Это значит что используется маска №23.
Вот весть список масок.
№маски - маска
1 - 128.0.0.0
2 - 192.0.0.0
3 - 224.0.0.0
4 - 240.0.0.0
5 - 248.0.0.0
6 - 252.0.0.0
7 - 254.0.0.0
8 - 255.0.0.0
9 - 255.128.0.0
10 - 255.192.0.0
11 - 255.224.0.0
12 - 255.240.0.0
13 - 255.248.0.0
14 - 255.252.0.0
15 - 255.254.0.0
16 - 255.255.0.0
17 - 255.255.128.0
18 - 255.255.192.0
19 - 255.255.224.0
20 - 255.255.240.0
21 - 255.255.248.0
22 - 255.255.252.0
23 - 255.255.254.0
24 - 255.255.255.0
25 - 255.255.255.128
26 - 255.255.255.192
27 - 255.255.255.224
28 - 255.255.255.240
29 - 255.255.255.248
30 - 255.255.255.252
31 - 255.255.255.254
32 - 255.255.255.255
24 это № этой 255.255.255.0 маски. Что это значит.
число 255 это в 2 битной системе 1 в каждом из 8 бит, т.е. 1111 1111
число 0 это в 2 битной системе 0 в каждом из 8 бит, т.е. 0000 0000
в 2 битной системе это 255.255.255.0 = 1111 1111. 1111 1111. 1111 1111. 0000 0000
Для того чтобы лучше понимать нужно инвертировать маску в 2 битной системе, т.е. 0 заменить на 1 и наоборот, т.е. получим
0000 0000. 0000 0000. 0000 0000. 1111 1111
Получается что если в блоке нет не одной единицы то этот блок остается неизменным, т.е менять мы можем только в последнем блоке.
Например если маску представить в виде такого шаблона #.#.#.*, то меняться цифры будут только там где стоит *
и поскольку число в 2 битной системе 1111 1111 в 10ричной системе будет 255, это значит что в изначальному IP адресу мы можем изменять только последний блок прибавляя к числу +1, 255 раз
Поскольку мы взяли для примера 00.206.4.0 IP, то при маске №24 мы получим такой список IP
00.206.4.0
00.206.4.1
00.206.4.2
и т.д. до
00.206.4.255
всего 256 (от 0 до 255)
Если для выбранного нами в качестве примера IP 00.206.4.0 возьмем например маску № 15 которая выглядит так
255.254.0.0, то в 2 битной системе это будет выглядеть уже так
1111 1111. 1111 1110 . 0000 0000 . 0000 0000
после инвертирования мы получим
0000 0000. 0000 0001. 1111 1111. 1111 1111
Значит выделенный диапазон IP равен 131’072 шт (2 в 17 степени)
Пример № 1 на Python 3
#!/usr/bin/env python3 nm = 17 # введем номер маски print(2**nm) #131 072
Пример № 2 на Python 3
#!/usr/bin/env python3 #вариант 3 (Другой вариант решения) nm = int(input("Введите число от 0 до 32 с номером маски: ")) print(f'Вы ввели маску № {nm}') print(f'{2**(32-nm)} к-во IP адрес(а/ов) для данной маски') s = bin(int("1"*nm, 2))[2:] s += '0'*(32-len(s)) print(f'{s[0:8]},{s[8:16]},{s[16:24]},{s[24:32]} маска в двухричной системе исчисления') print(f'{int(s[0:8],2)},{int(s[8:16],2)},{int(s[16:24],2)},{int(s[24:32],2)} маска в десятиричной системе исчисления')