Мне нужен способ быстро проверить, попадает ли IP-адрес в один из многих запрещенных диапазонов IP.
В настоящее время я использую iptables, чтобы проверить, попадает ли IP в указанный диапазон. Это отлично работает для нескольких тысяч диапазонов, но это число может резко возрасти до нескольких сотен тысяч и будет продолжать расти.
Другой проблемой моего текущего метода простого добавления новых правил в iptables является увеличение количества дубликатов.
Мне нужен эффективный метод проверки того, попадает ли IP-адрес или диапазон в существующий (больший) диапазон, прежде чем он будет добавлен в набор правил.
Ruby - это язык, с которым я наиболее знаком, но какие структуры данных были бы лучшими вариантами для постоянно растущего числа диапазонов?
Одно из решений, которое я придумал, - использовать наборы Redis или, возможно, MongoDB для хранения отдельных IP-адреса как целые числа, а затем просто проверьте, существует ли IP-адрес в наборе ... но моя интуиция подсказывает мне, что должен быть более умный способ.
Если бы я должен был преобразовать IP-адреса в целые числа и сохранить диапазоны, какой был бы оптимальный способ просмотреть диапазоны, чтобы увидеть, может ли новый IP-адрес или диапазон уже охватываться существующим большим диапазоном?
Заключительное примечание : скорость важнее затрат на память.