Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

建议改进禁IP格式问题

[复制链接]
军刀闪亮 发表于 2012-8-14 12:32:24 | 显示全部楼层 |阅读模式
现在禁止IP的格式为单行单段形式,如:59.58.*.*,这样很不方便操作,一下子把第三段都禁止了。
而我们日常需要的格式是可以把第三段分段禁止,如:59.58.96.*--59.58.151.*禁止,而59.58.95及以前段放行。
这样的话,按照现在的格式就得写出从96-151共156行来,太麻烦了,也不现实。
回复

使用道具 举报

qwcgy 发表于 2012-8-14 13:40:39 | 显示全部楼层
呵呵,反正我是无所谓啦、
回复

使用道具 举报

小森我爱你 发表于 2012-8-14 17:33:45 | 显示全部楼层
这个不好解决,估计。
回复

使用道具 举报

mark35 发表于 2012-8-14 22:13:04 | 显示全部楼层
本帖最后由 mark35 于 2012-8-14 22:28 编辑

很简单的原因,PHP没有ip相关处理、验证函数,ipv4有4个分段处理起来复杂,ipv6更复杂。

还有一个原因mysql没有inet/cidr类型字段,只能以4个字符串字段或者一个字符串字段方式来匹配效率低下且某些匹配需求无法实现。否则dz所有涉及到ip的地方都可以以CIDR的格式来书写及操作了。
我把dz一些表的ip字段改成了ipnet类型,查询时就可使用 192.168.0.0/16 这样的格式来匹配,比字符串方式效率高的不是一点,更重要的是可以实现更强大匹配搜索功能:

  1. -- 所有ip在 14.100.*.* 范围内的用户
  2. SELECT * FROM cdb_sessions WHERE ipnet << '14.100/16';
  3. SELECT * FROM cdb_sessions WHERE ipnet << '14.100.0.0/16';

  4. -- 缩小范围
  5. SELECT ipnet FROM cdb_sessions WHERE ipnet > '14.100.25/24' AND ipnet < '14.100.30/24';
复制代码
回复

使用道具 举报

 楼主| 军刀闪亮 发表于 2012-8-14 22:35:07 | 显示全部楼层
mark35 发表于 2012-8-14 22:13
很简单的原因,PHP没有ip相关处理、验证函数,ipv4有4个分段处理起来复杂,ipv6更复杂。

还有一个原因my ...

能说说应该怎么处理这个问题吗
回复

使用道具 举报

mark35 发表于 2012-8-15 12:37:05 | 显示全部楼层
本帖最后由 mark35 于 2012-8-15 12:45 编辑
军刀闪亮 发表于 2012-8-14 22:35
能说说应该怎么处理这个问题吗

解决成本不低。
PHP方面要能处理ip并验证格式,确保不会出现 192.*.1.1这种输入。
不过mysql在范围查询实现很困难:
1、如果是用4个字段保存ip,那么在搜索时需要对字段逐一匹配,繁琐。并且可能用不上索引。
2、如果是用一个字段表示ip,那么无法实现范围匹配。
select '192.168.0.1' < '192.168.0.111'; 结果是真
select '192.168.0.51' < '192.168.0.111'; 结果是假

而对于pgsql来说下面查询结果为真:
SELECT '192.168.0.51'::inet < '192.168.0.111'::inet;

还是那句话:mysql是最昂贵的免费数据库。本该由数据库实现的功能mysql做不到只有交给应用层完成,造成效率极大降低。甚至根本完成不了。






回复

使用道具 举报

 楼主| 军刀闪亮 发表于 2012-8-15 17:13:13 | 显示全部楼层
mark35 发表于 2012-8-15 12:37
解决成本不低。
PHP方面要能处理ip并验证格式,确保不会出现 192.*.1.1这种输入。
不过mysql在范围查询 ...

谢谢说明,大概明白了。
不过,后台全局的注册限制里好像就是使用的一个字段来限制IP的吧,不知与你说的是不是一回事。
QQ截图20120815171248.jpg
回复

使用道具 举报

 楼主| 军刀闪亮 发表于 2012-8-22 10:02:46 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-10 17:16 , Processed in 0.127486 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表