Поиск IP-адресов в заданном диапазоне IP-адресов в Rails - PullRequest
0 голосов
/ 07 апреля 2020

В рельсах у меня иногда может быть IP-адрес 10.0.0.1 или 10.0.0.1/24 (только примеры), и я хотел бы найти в базе данных IP-адреса, которые либо соответствуют одному IP-адресу, либо попадают в диапазон CIDR.

Вот как я нахожу первый и последний IP:

            ip_range = "10.0.0.0/24"
            range = IPAddr.new(ip_range).to_range.to_a
            start_ip = range[1].to_s # 10.0.0.1
            last_ip = range[-2].to_s # 10.0.0.254

            condition_statement = "(ip >= '#{start_ip}' AND ip <= '#{last_ip}')"
            condition += initial ? condition_statement : " OR #{condition_statement}"

Проблема в том, что если начальный IP-адрес 10.0.0.1, а последний IP-адрес 10.0.0.254, то условие никогда не найдет 10.0.0.29, поскольку оно не попадает между диапазонами в соответствии с условием.

Как можно изменить это условие, чтобы 0-254 фактически включало каждое число между 1-254, включая 29, 30 и т. д. c?

Одна вещь, о которой я подумал, это преобразование start_ip и last_ip в целые числа, а затем поиск по столбцу ip в модель для IP-адресов (удаление "." и преобразование в целые числа), но я тоже не совсем уверен, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...