我有一个相当大的IP和IP块列表,我想要禁止。我的列表是以块为单位完成的,目前的格式如下:
1.2.3.4-1.2.3.54
5.6.7.8-5.6.7.8
2.3.4.5-2.3.4.116我试图通过某种方式将这些IP放入MySQL数据库中,从而找到阻止这些IP的最有效的方法。当然,我可以将所有块分成单独的IP,并将它们放在它们自己的MySQL记录中,但对于大量的IP,这将是非常低效的。阻止整个范围,例如"1.2.3.*“也会导致不必要的禁止许多用户。
有没有一种方法可以有效地做到这一点?
发布于 2012-06-08 04:07:08
您可以使用MySQL INET_ATON()和INET_NTOA()函数。请记住,这些是特定于MySQL的,但您也可以使用php来实现它们。
这些函数将IP地址从点标记转换为整数。然后,您可以将它们存储在具有"start_ip“和"end_ip”列的表中。当您查询某个IP是否被禁用时,您可以使用介于两者之间的查询。
SELECT * FROM bans WHERE INET_ATON("127.0.0.1") BETWEEN start_ip AND end_ip发布于 2012-06-08 03:56:23
发布于 2012-06-08 03:57:55
我会有一个这样的表:
range | start_number | end_number
------+--------------+-----------它们将分别保存(例如):1.2.3、4和54。
然后,您可以轻松地检查连接的IP地址是否在该范围内,以及最后一部分是否在start_number和end_number之间。
https://stackoverflow.com/questions/10938865
复制相似问题