Работа с модулем ipaddress

Работа с модулем ipaddressАх, IP-адреса и маски подсети – звучит как начало анекдота: «Заходит IP-адрес в бар и спрашивает у маски подсети…» Но не будем забегать вперёд! В прошлой статье мы уже познакомились с моделью OSI и поняли, что данные в сети путешествуют куда активнее туристов на майские праздники. Каждый гаджет в этой сети имеет свой уникальный IP-адрес, который можно сравнить с паспортом – без него никуда. А маска подсети – это словно шлагбаум на дороге: она решает, кто пойдёт направо (в сеть), а кто налево (вузел).

Теперь пришло время перейти от теории к практике. Представьте себе ЕГЭ по информатике как квест для настоящих гиков.

Задание 13 требует от вас не просто знать, что такое IP-адресация, а уметь ловко вычислять адрес сети, широковещательный адрес и количество хостов. Кто-то скажет: «Зачем всё это вручную? Есть же Python!» И будет абсолютно прав – модуль ipaddress спасёт вас от бессонных ночей.

Но сначала немного теории для тех, кто любит покопаться в деталях. Маска подсети – это 32-битное число, записанное в привычном формате четырёх чисел от 0 до 255 через точки.

Например, классическая маска 255.255.255.0 выглядит так же скучно и строго, как учитель математики на первом уроке: никаких сюрпризов! В двоичном виде это просто ряд из двадцати четырёх единиц подряд и восьми нулей после них – словно солдатский строй без единого нарушителя дисциплины.

Почему важно соблюдать порядок? Потому что если вдруг единицы начнут прыгать туда-сюда между нулями – получится такая мешанина, что даже самый опытный сетевой админ запутается.

Представьте себе маску 255.255.0.255 – это как если бы вы пытались надеть носок поверх ботинка… ну вы поняли.

Чтобы не писать каждый раз эту длинную цепочку цифр, придумали CIDR-нотацию – компактный способ записи через косую черту и число префикса, например /24 для нашей любимой маски 255.255.255.0. Чем выше число после косой черты, тем меньше устройств поместится в вашей сети; это как размер комнаты: больше префикс — меньше гостей.

Количество адресов вычисляется формулой N = 2^(32 — префикс).

Если подумать о компьютерах как о гостях на вечеринке, то при префиксе /24 у вас есть целых 256 мест — но два из них всегда заняты хозяином дома (адрес сети) и охранником на входе (широковещательный адрес). Так что для гостей остаётся всего 254 места.

Ну а теперь представьте ситуацию: у вас есть устройство с IP-адресом 192.168.1.67 и маской 255.255.255.0 — классика жанра! Чтобы понять адрес сети, нужно выполнить побитовую операцию AND между IP и маской — звучит страшно?

На самом деле это похоже на проверку списка гостей по списку приглашённых: совпадает — проходи!

Переводим числа в двоичный вид (это как читать мысли компьютера) и применяем операцию И к каждому биту:

IP-адрес: 11000000.10101000.00000001.01000011
Маска: 11111111.11111111.11111111.00000000
Результат: 11000000.10101000.00000001.00000000

Итоговый адрес сети – 192.168.1.0 — место встречи всех устройств этой локальной тусовки.

А чтобы узнать номер конкретного устройства (узла), нужно инвертировать маску (заменить все единицы на нули и наоборот) и снова сделать AND с IP-адресом — словно искать своего друга по бейджику среди толпы:

Инверсия маски: 00000000.00000000.00000000.11111111
IP-адрес: 11000000.10101000.00000001.01000011
Результат: 00000000.00000000.00000000.01000011

Вот оно! Устройство номер 67 в сети.

Знаете, эта операция напоминает мне старый анекдот про программиста:…

This entry was posted in Разное. Bookmark the permalink.