Слайд 2: Основные определения
IP-адрес ( Internet Protocol Address ) - это уникальный числовой идентификатор, присваиваемый каждому устройству в сети. Корректный ip адрес состоит из 4-х чисел (октеты), разделенных точками, и каждое число находится в диапазоне от 0 до 255. Например, 192.168.1.1 Маска подсети определяет, какая часть IP-адреса относится к адресу сети, а какая - к адресу устройства в этой сети. Маска представляется числом, например, 255.255.255.0, и состоит из единиц, обозначающих биты, принадлежащие адресу сети. Адрес сети= IP- адрес & Маска подсети
Слайд 3
IP-адресы обычно записываются в десятичной системе счисления для удобства чтения и восприятия людьми. При работе с битовыми операциями и манипуляциями с данными, каждый бит в октете имеет свое значение и важен для правильного представления числа или символа, поэтому запись в двоичном представлении необходимо дополнять незначащими нулями до 8 разрядов. Пример: 31.131.250.17 - > 00011111. 10000011. 11111010. 00010001 Первый байт Второй байт Третий байт Четвёртый байт
Слайд 4: Сеть и узел
IP-адрес – это не просто набор чисел. Он имеет свою структуру и делится на две основные части: адрес сети и адрес узла. Адрес сети определяет конкретную сеть, в которой находится устройство, и используется для маршрутизации данных. Адрес узла идентифицирует конкретное устройство внутри этой сети.
Слайд 5: Маска
Для определения адреса сети и адреса узла используется маска подсети. Маска подсети – это дополнительное число, которое указывает, какая часть IP-адреса относится к адресу сети, а какая – к адресу узла. Она представляет собой последовательность битов, где единицы обозначают адрес сети, а нули – адрес узла. Часть с единицами – неизменяемая, в отличии от части с нулями. Адрес сети получается в результате применения поразрядной конъюнкции (сложение) к заданному адресу узла и маске сети.
Слайд 7: Задание
По заданным IP-адресу узла и маске определите адрес сети. IP-адрес узла: 102.9.140.219 Маска: 255.255.192.0 Преобразуем оба адреса в двоичную систему: IP-адрес узла (в двоичной системе): 01100110.00001001.10001100.11011011 Маска (в двоичной системе): 11111111.11111111.11000000.00000000 Теперь применим операцию "И" (AND) к каждому биту IP-адреса и маски: 01100110.00001001.10001100.11011011 (IP-адрес узла) 11111111.11111111.11000000.00000000 (Маска) 01100110.00001001.10000000.00000000 (Адрес сети) или 102.9.128.0.
Слайд 8: Широковещательный адрес и адрес сети
Широковещательный адрес – это специальный адрес, который используется для отправки сообщений всем устройствам в сети. Этот адрес всегда имеет последний ip адрес сети. Если ip сети равна 192.168.1.0 то компьютеры этот адрес уже использовать не могут. Тогда адреса узлов - все IP-адреса, кроме адреса сети и широковещательного адреса, то есть в данной сети адреса узлов будут в диапазоне от 192.168.1.1 до 192.168.1.254.
Слайд 9: Библиотека ipaddress
ipaddress позволяет работать с адресами и сетями. Нам понадобиться несколько функций и методов из этой библиотеки: ip_network, network_address, netmask, ip_address, num_addresses hosts
Слайд 10
ip_address - функция для создания объекта IP-адреса. from ipaddress import ip_address ip = ip_address ( '192.168.0.1' ) print ( ip ) - > 192.168.0.1 ip_network - функция для создания объекта сети IP-адресов. from ipaddress import ip_network net = ip_network ( '192.168.0.0/24’, 0 ) print (net) -> 192.168.0.0/24 network_address - метод, возвращающий сетевой адрес для объекта сети from ipaddress import ip_network net = ip_network ( '192.168.0.0/24 ‘, 0 ) print ( net.network_address ) -> 192.168.0.0 Всегда при использовании функции ip_network второе число 0
Слайд 11
netmask - метод, возвращающий маску подсети для объекта сети. from ipaddress import ip_network net = ip_network ( '192.168.0.0/24‘, 0 ) print ( net.netmask ) -> 255.255.255.0 num_addresses - метод, возвращающий количество IP-адресов в сети. from ipaddress import ip_network net = ip_network ( '192.168.0.0/24‘, 0 ) print ( net.num_addresses ) - > 256 hosts() - возвращает все доступные IP-адреса для использования в сети (исключая адрес сети и широковещательный адрес). from ipaddress import ip_network net = ip_network ( '192.168.0.0/24 ‘, 0 ) for ip in net.hosts (): print ( ip )
Слайд 12: Задача 10576 с Комп ЕГЭ
mask = ip_network ( "0.0.0.0/255.255.240.0“, 0 ) print ( mask.num_addresses - 2 )
Слайд 13: Задача 19245 с Комп ЕГЭ
net = ip_network( "218.194.82.148/255.255.255.192", 0 ).hosts() print ( max (net))
Слайд 14: Задача 18487 с Комп ЕГЭ
for a in range ( 256 ): f = 0 net = ip_network ( f"192.214. { a }. 184/255.255.255.224", 0 ) for ip in net: if bin ( int ( ip ))[ 2 :].count ("1" ) <= 15 : f = 1 break if f == 0: print (a) break
Слайд 15: Задача 14948 с Комп ЕГЭ
net = ip_network ( "192.168.32.128/255.255.255.192", 0 ) k = 0 for ip in net: if bin ( int ( ip ))[2:].count( "1" ) % 2 == 0 : k += 1 print (k)
Слайд 16: Задача 10575 с Комп ЕГЭ
for mask in range ( 31 ): net = ip_network ( f"118.193.30.139/ { mask } ", 0 ) if net.network_address == ip_address ( "118.193.24.0“ ): print ( net.netmask )
Слайд 17: Задача 16260 с Комп ЕГЭ
for mask in range ( 31 ): net1 = ip_network ( f"123.20.103.136/ { mask } ", 0 ) net2 = ip_network ( f"123.20.103.151/ { mask } ", 0 ) if net1.network_address != net2.network_address: print (net1.netmask)