mysql - 如何在 SQL 查询中过滤 IP 地址范围?
问题描述
我正在使用网络应用程序,当用户尝试登录我的应用程序时,我做了一些检查/限制。现在我需要创建一个白名单功能来通过这些检查使用用户 IP 地址。
我正在尝试编写一条 sql 语句来获取匹配的 IP 地址以实现白名单。如果sql返回数据则通过检查,如果没有则继续检查。
但是数据库中的白名单表需要支持192.168.* or 192.* or (*. *.1.1) ,所以如果用户ip是192.XXX就会返回数据并通过
SELECT * FROM whitelist WHERE ip_address = $ip;
我的sql语句是这样的。
解决方案
我同意@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 地址。但是你可以根据你的要求改变它。
推荐阅读
- android - 通过 wifi 调试连接到特定 USB 控制器的应用程序
- android - Android Wrap Shell 脚本无法按预期工作
- sqlite - Mono 上带有 SQLite 的 EF Core:找不到 e_sqlite3
- ios - Peek 和 Pop 泄漏 mainWindow.rootViewController
- php - 我正在使用 AES ECB 256 填充 - 加密发送数据,但我无法实现解密
- java - 如何在java中将json文件解析为json对象
- python - 如何使用 Librosa 在 python 中读取音频?
- python - 如何从数据框中获取值?
- swift - Swift 协议导致无效的重新声明和混乱的函数表
- mysql - MySQL REGEXP_SUBSTR() 转义问题?