通过IP地址范围限制访问(PHP)

4
基本上,我旨在允许用户指定IP范围以便访问测试。假设这些值存储在我的数据库中:
from: 148.197.34.112
to: 148.197.34.255
有没有函数可以用来将这些IP地址转换为数字进行比较?
因此,如果用户尝试加载页面...如果他的IP不在IP范围内,则重定向他们。
提前感谢 :)

如果有人能提供生成IPv6地址范围的代码,我将不胜感激。 - OZ_
有特定的原因要在 PHP 中这样做吗?因为你也可以在你的 Web 服务器配置中轻松实现这个功能… - wimvds
我没有访问 Web 服务器配置的权限 - 这是一个大学项目。谢谢大家。 - dapperwaterbuffalo
2个回答

6

ip2long() 函数可以用于 IPv4 地址转换。

要将 IPv6 地址转换为 128 位整数,请使用 inet_pton() 函数。


谢谢 :D 有没有处理IPv6地址的工具? - dapperwaterbuffalo

1
如果数据库中存储的值正好是这种格式,那么您可以在 MySQL 中使用 INET_ATON 函数(至少在 MySQL 中),并在 PHP 中使用 ip2long()。
$iplong=ip2long($ip);
$q=mysql_query("SELECT * FROM ips WHERE INET_ATON(ip_from)<='".$iplong."' AND INET_ATON(ip_to)>='".$iplong."' LIMIT 0,1");

当然,将长值存储在数据库中而不是纯IP会更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接