我有一个相当大的 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,并将它们放入自己的 MySQL 记录中,但是对于大量 IP,这将非常低效。阻止整个范围,例如“1.2.3.*”也会导致不必要地禁止大量用户。
有没有办法有效地做到这一点?
为什么不使用netmasks http://www.iplocation.net/tools/netmask.php?
- 192.168.1.0/24 块 192.168.1.0 - 182.168.1.255
- 1.0.0.0/8 块 1.0.0.0 - 1.255.255.255
通过这种方式,IPv4 地址只需要 5 个字节。如果您想巧妙地使用掩码,请将其设置为 8 个字节。
这样做的好处是可以非常快速地进行比较,只需将掩码与 IP 进行“或”运算即可。这就是 IP 路由的工作原理。
此外,您还可以使用 MySQL 函数INET_NTOA http://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_inet-ntoa and INET_ATON http://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_inet-aton将点格式的 IP 地址转换为数字形式,然后再转换回来,从而使存储高效且易于使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)