IP-адресация, маска подсети (программирование)
Ким 13
( Умение использовать маску подсети)
(П,3 мин)
IP-адрес
адрес сети
адрес узла
маска
11........11
00.........00
IP-адресация
Первая часть IP-адреса (единичные биты маски)- адрес сети .
Вторая часть IP-адреса (нулевые биты маски)- адрес узла в сети.
Адрес сети = поразрядная конъюнкция к IP-адресу узла и маске.
Адрес сети
IP-адрес
Адрес узла сети
1
1
1
0
0
1
1
1
.
1
0
0
0
1
1
1
0
.
0
0
0
1
0
0
1
1
.
0
0
0
1
1
1
1
0
Маска
1
1
1
1
1
1
1
1
.
1
1
1
1
1
1
1
1
.
1
1
1
0
0
0
0
0
.
0
0
0
0
0
0
0
0
Адрес сети
1
1
1
0
0
1
1
1
.
1
0
0
0
1
1
1
0
.
0
0
0
0
0
0
0
0
.
0
0
0
0
0
0
0
0
Пример 1.
IP-адрес узла равен 198.154.120.167, а маска равна 255.255.224.0. Требуется найти адрес сети.
1
9
2
5
8
.
5
1
.
5
2
5
4
.
5
.
1
2
2
2
0
.
4
.
1
6
7
0
198 . 154 . . 0
0
1
1
1
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
120 10 = 01111000 2 224 10 =11100000 2
&
1100000 2 = 64 + 32 = 96 10 .
Пример 1.
IP-адрес узла равен 198.154.120.167, а маска равна 255.255.224.0. Требуется найти адрес сети.
IP-адрес
1
2
9
8
5
5
.
1
.
2
5
5
4
5
.
1
.
2
2
2
0
4
.
1
.
6
7
0
маска
198 . 154 . 96 . 0
IP-сети
Пример 2.
Для узла с IP-адресом 119.183.208.227 адрес сети равен 119.183.192.0. Каково наименьшее возможное количество единиц в разрядах маски?
119 . 183 . 208 . 227
IP-адрес
255 . 255 . . 0
маска
119 . 183 . 192 . 0
IP-сети
Пример 2.
119 . 183 . 208 . 227
IP-адрес
255 . 255 . . 0
маска
119 . 183 . 192 . 0
IP-сети
208 10 = 11010000 2
192 10 = 11000000 2
110 0 0000 2 = 192 10
Пример 2.
119 . 183 . 208 . 227
IP-адрес
255 . 255 . 192 . 0
маска
119 . 183 . 192 . 0
IP-сети
208 10 = 11010000 2
192 10 = 11000000 2
110 0 0000 2 = 192 10
Библиотека ipaddress
функции ip_address()
from ipaddress import *
ip = ip_address ('192.168.0.1')
print(ip)
функция ip_address() возвращает объект
ipaddress.IPv4Address
Создание сети
Функция ip_network()
сеть задаётся: IP-адрес / маска сети
from ipaddress import *
net = ip_network (' 192.168.32.160/255.255.255.240 ‘)
# перебор всех адресов
for ip in net:
print(ip)
Создание сети
Функция ip_network()
сеть задаётся: IP-адрес узла / маска сети
from ipaddress import *
net = ip_network (' 192.168.32.160/255.255.255.240 ‘, 0)
Параметр strict=False говорит функции вычислить сеть, содержащую данный IP.
Примечание:
- При переборе циклом IP-адресов сети, мы получаем и адрес сети и широковещательный адрес (маска –все «1»)
Демо 2026
У созданной сети можно узнать адрес сети и её маску
from ipaddress import *
net = ip_network( '191.128.66.83/ 255.192.0.0 ‘,0)
print(' Адрес сети :', net.network_address)
print(' Маска сети :', net.netmask)
Программа выводит
Адрес сети: 111.81.192.0
Маска сети: 255.255.192.0
У сети мы можем узнать количество её узлов и IP-адресов
from ipaddress import *
net = ip_network( '191.128.66.83/255.192.0.0' ,0)
count_uzl = len(list(net.hosts()))
count_ip = len(list(net))
к сети применяем метод hosts(), чтобы получить узлы сети.
Кол-во узлов = кол-во IP-адресов – 2
(адрес сети и широковещательный адреса не могут выступать в качестве адресов узлов)
№ 1
Видеоразбор
- https://ya.ru/video/preview/268966110003691401
Часть 2
№ 2 - средняя
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP - адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана IP-адресом 192.168.63.0 и маской сети 255.255.255.128.
Сколько в этой сети IP-адресов, для которых количество нулей в двоичной записи IP-адреса не кратно 5?
В ответе укажите только число.
from ipaddress import *
k = 0 name= ip_network( ' 192.168.63.0/255.255.255.128 ' , 0 ) for ip in name:
# представить IP в двоичном коде
количество нулей в двоичной записи IP-адреса не кратно 5?
from ipaddress import *
k = 0 name= ip_network( ' 192.168.63.0/255.255.255.128 ' , 0 ) for ip in name:
bin_ip = bin( int( ip) ) [2 : ]
количество нулей в двоичной записи IP-адреса не кратно 5?
from ipaddress import *
k = 0 name= ip_network( ' 192.168.63.0/255.255.255.128 ' , 0 ) for ip in name:
bin_ip = bin( int( ip) ) [2 : ]
ip_0 = bin_ip .count ( '0' ) if ip_0 % 5 != 0: k += 1 print(k)
количество нулей в двоичной записи IP-адреса не кратно 5?
№ 3- средняя
Сеть задана IP-адресом одного из входящих в неё узлов 10.15.179.18 и сетевой маской 255.255.254.0.
Найдите в данной сети наибольший IP-адрес, который может быть назначен компьютеру. В ответе укажите сумму десятичных числовых значений байтов найденного IP-адреса.
Например, если бы найденный адрес был равен 100.20.3.4, то в ответе следовало бы записать: 127.
широковещательный
- from ipaddress import * name = ip_network( '10.15.179.18/ 255.255.254.0 ' , 0) print(name[-2])
3
4