php检测ip源码,PHP 中检查或过滤IP地址的实现代码

PHP 中检查或过滤IP地址的实现代码

更新时间:2011年11月27日 22:40:02   作者:

网络环境异常复杂,有时候我们不得不禁止一些恶意用户访问,禁止的方式有很多种,其中一种就是通过 IP 来限制,本文提供的方法允许你通过 IP 区间、CIDR (Classless Inter-Domain Routing)及单个 IP 格式来检查或过滤 IP 地址

你可以通过增加一个配置文件,然后将需要禁止的一些 IP 地址通过一定规则添加到配置文件中,在程序初始化的时候,读取配置文件中的每个规则,然后通过本文提供的方法去检查当前访问的客户端 IP 地址是否存在于这些规则中,如果存在,则拒绝提供服务。

/**

* PHP 中检查或过滤 IP 地址

*

* 支持 IP 区间、CIDR(Classless Inter-Domain Routing)及单个 IP 格式

* 整理:http://www.CodeBit.cn

* 参考:

* - {@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 地址限制访问具有一定的局限性,使用的时候需要谨慎,但是对于应急限制访问来说,还是非常有用的。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了9个非常有用的PHP代码片段,可以帮助你开发 PHP项目,下面这里收集了9个PHP代码片段,感兴趣的小伙伴们可以参考一下2016-03-03

4f55910a645b073bc4fc65dc10dc14bd.png

这篇文章主要介绍了PHP面向对象五大原则之开放-封闭原则(OCP),简单分析了PHP面向对象开放-封闭原则(OCP)的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下2018-04-04

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法,涉及memcache服务器的安装及php操作memcache存储session的相关技巧,需要的朋友可以参考下2016-05-05

4f96a78db829b1556ff16de21e013c7a.png

本篇文章是对flush()不能按顺序输出时的解决办法进行了详细的分析介绍,需要的朋友参考下2013-06-06

8cc1031babc6aff2319f1c6af8544aa0.png

这篇文章主要介绍了关于php中一些字符串总结,需要的朋友可以参考下2016-05-05

0c932a99bb7b6f23c937db507070cc7b.png

本文介绍下,用php实现正则匹配日期与时间,并进行时间戳转换的例子,有需要的朋友,参考下吧2016-12-12

cca732bf65a93ed2ec0ac80c638460fe.png

这篇文章主要介绍了原生PHP实现导出csv格式Excel文件的方法,结合实例形式分析了基于原生php实现的Excel文件操作类进行Excel文件的导出操作相关实现技巧,并附带源码供读者下载参考,需要的朋友可以参考下2019-03-03

2d9f31f2af7b675a3d153d2b7f1035a7.png

这边文章主要向我们简单介绍了下json_encode的使用方法,非常简单实用,这里推荐给大家。2015-03-03

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了PHP过滤器 filter_has_var() 函数用法,结合实例形式分析了PHP过滤器 filter_has_var() 函数基本功能、原理、用法及操作注意事项,需要的朋友可以参考下2020-04-04

f4838ec7e2d4da28e0b57d4e852dadd4.png

本篇文章是对PHP常用的字符串进行了详细的总结分析,需要的朋友参考下2013-06-06

最新评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值