Нужно написать класс RKN
, который
- принимает в качестве аргумента конструктора список ipv4 подсетей в формате
<ip>/<bits>
(напр.10.0.0.0/8
). Будем называть эти подсети забаннеными - реализует метод
is_banned
, который принимает один ipv4 адрес в стандартном формате (напр.10.0.0.1
) и проверяет, принадлежит ли адрес хотя бы одной забанненой подсети.
Как видно из интерфейса, список забанненых подсетей предполагается неизменным. Метод is_banned
нужно реализовать таким образом, чтобы он работал как можно быстрее (список забаненных подсетей может быть большим, но он помещается в оперативную память).
Тесты желательны, но их можно реализовать без использования фреймворков, просто после if __name__ == "__main__"
.
Пример использования:
r = RKN(['10.0.0.0/8', '8.8.8.8/32'])
print(r.is_banned('10.1.2.3')) # True
print(r.is_banned('127.0.0.1')) # False
print(r.is_banned('8.8.8.8')) # True
print(r.is_banned('8.8.8.7')) # False