Как отфильтровать диапазон IP-адресов в запросе SQL? - PullRequest
0 голосов
/ 09 апреля 2019

Я работаю в веб-приложениях, я сделал некоторые проверки / ограничения, когда пользователь пытается войти в мое приложение.Теперь мне нужно сделать функцию белого списка для прохождения этих проверок, используя IP-адрес пользователя.

Я пытаюсь написать SQL-оператор, чтобы получить соответствующий IP-адрес, чтобы получить белый список.Если sql возвращает данные, то передайте проверку, если не просто продолжите проверку.

Однако таблица белого списка в базе данных должна поддерживать 192.168. * Или 192. * или (*. * .1.1). Так чтовернет данные и передаст, если ip пользователя 192.XXX

SELECT * FROM whitelist WHERE ip_address = $ip;

мой SQL-запрос, как это.

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Я согласен с комментариями @arno. Если у вас ограниченное значение для проверки, используйте регулярное выражение вместо вызова базы данных. Это сэкономит вам время.

Но если вы хотите вызвать базу данных, то я помню, что MySql также поддерживает регулярные выражения в запросе

SELECT 
    * 
FROM
    whitelist 
WHERE 
    ip_address REGEXP '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';

Выше regex для проверки всех действительных IP-адресов. Но вы можете изменить его в зависимости от ваших требований.

1 голос
/ 09 апреля 2019

Нет естественного случая, когда вам нужно сопоставить что-то вроде *.*.1.1.

IP-адреса в основном соответствуют подсетям в их нотации CIDR. Потому что так устроены сети.

Еще проще: вы можете конвертировать IP-адреса в тип данных long, используя INET_ATON(), и делать простые совпадения, используя > и <.

Пожалуйста, обратитесь к этим решениям:

Есть ли способ сопоставить IP с IP + CIDR прямо из запроса SELECT?

https://dba.stackexchange.com/questions/171044/determining-if-an-ip-is-within-an-ipv4-cidr-block

0 голосов
/ 09 апреля 2019

Вы можете использовать LIKE statment:

SELECT * FROM whitelist WHERE ip_address LIKE '192.168.%';

Символ % позволяет заменить его любому символу, поэтому приведенный выше запрос вернет IP-адрес в диапазоне 192.168.0.0 - 192.168.255.255, при условии, что у вас действительно есть только IP-адреса в этом поле.

...