Свой или чужой
Прогресс комнаты
0 / 4
Задание 1Введение
Цель: Проверять принадлежность адреса подсети.
Напишите cidr_contains(cidr, ip): принадлежит ли IPv4-адрес подсети вида 10.0.0.0/8. Вход корректен.
Задание 2Теория и инструменты
Подсеть a.b.c.d/n — это все адреса с одинаковыми первыми n битами.
Такие проверки нужны в белых списках, файрволах и защите от SSRF.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
Пример 1
cidr_contains("10.0.0.0/8", "10.20.30.40")
→ trueПример 2
cidr_contains("10.0.0.0/8", "11.0.0.1")
→ falseЕщё 8 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Переведите адреса в 32-битные числа.
- 2Постройте маску из n единиц слева.
- 3Сравните адреса после наложения маски.
Подсказки — каждая до решения стоит −25 очков
Задание 4Как защититься
В продакшене используйте ipaddress.ip_network(...) — меньше шансов ошибиться на граничных случаях.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.