首页 > 解决方案 > 如何在 SQL 查询中过滤 IP 地址范围?

问题描述

我正在使用网络应用程序,当用户尝试登录我的应用程序时,我做了一些检查/限制。现在我需要创建一个白名单功能来通过这些检查使用用户 IP 地址。

我正在尝试编写一条 sql 语句来获取匹配的 IP 地址以实现白名单。如果sql返回数据则通过检查,如果没有则继续检查。

但是数据库中的白名单表需要支持192.168.* or 192.* or (*. *.1.1) ,所以如果用户ip是192.XXX就会返回数据并通过

SELECT * FROM whitelist WHERE ip_address = $ip;

我的sql语句是这样的。

标签: mysqlsqlip-address

解决方案


我同意@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]?)$';

上面的正则表达式是检查所有有效的 IP 地址。但是你可以根据你的要求改变它。


推荐阅读