php过滤IP表,PHP 检查或过滤IP地址的代码

网络环境异常复杂,有时不得不禁止一些恶意用户访问,禁止的方式有很多种,其中一种就是通过 IP 来限制,本文提供的方法允许你通过 IP 区间、CIDR (Classless Inter-Domain Routing)及单个 IP 格式来检查或过滤 IP 地址你可以通过增加一个配置文件,然后将需要禁止的一些 IP 地址通过一定规则添加到配置文件中,在程序初始化的时候,读取配置文件中的每个规则,然后通过本文提供的方法去检查当前访问的客户端 IP 地址是否存在于这些规则中,如果存在,则拒绝提供服务。

复制代码代码如下:

<?php   /**  * PHP 中检查或过滤 IP 地址  *  * 支持 IP 区间、CIDR(Classless Inter-Domain Routing)及单个 IP 格式  * 整理:http://www.jbxue.com  * 参考:  * - {@link http://us2.php.net/manual/zh/function.ip2long.php#70055}  * - {@link http://us2.php.net/manual/zh/function.ip2long.php#82397}  *  * @param string $network 网段,支持 IP 区间、CIDR及单个 IP 格式  * @param string $ip 要检查的 IP 地址  * @return boolean  */  function netMatch($network, $ip) {  $network = trim($network);  $ip = trim($ip);  $result = false;  // IP range : 174.129.0.0 - 174.129.255.255  if (false !== ($pos = strpos($network, "-"))) {  $from = ip2long(trim(substr($network, 0, $pos)));  $to = ip2long(trim(substr($network, $pos+1)));  $ip = ip2long($ip);  $result = ($ip >= $from and $ip <= $to);  // CIDR : 174.129.0.0/16  } else if (false !== strpos($network,"/")) {  list ($net, $mask) = explode ('/', $network);  $result = (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net);  // single IP  } else {  $result = $network === $ip;  }  return $result;  }  // 174.129.0.0 - 174.129.255.255  var_dump(netMatch(' 174.129.0.0 - 174.129.255.255 ', '174.129.1.31')); // True  var_dump(netMatch(' 174.129.0.0/16 ', '174.139.1.31')); // False  var_dump(netMatch(' 174.129.1.32 ', '174.129.1.31')); // False  ?> 由于中国使用的大多数都是动态 IP 地址,所以通过 IP 地址限制访问具有一定的局限性,使用的时候需要谨慎,但是对于应急限制访问来说,还是非常有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值