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


Posted in PHP onNovember 27, 2011

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

<?php 
/** 
* 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 地址限制访问具有一定的局限性,使用的时候需要谨慎,但是对于应急限制访问来说,还是非常有用的。
PHP 相关文章推荐
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 #PHP
PHP中strtotime函数使用方法详解
Nov 27 #PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 #PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 #PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 #PHP
php操作SVN版本服务器类代码
Nov 27 #PHP
支持中文的php加密解密类代码
Nov 27 #PHP
You might like
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Django框架模板的使用方法示例
2019/05/25 Python
简单了解django orm中介模型
2019/07/30 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
简单的JAVA编程面试题
2013/03/19 面试题
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
大学学习计划书范文
2014/05/02 职场文书
岗位职责说明书
2014/05/07 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
浅谈MySQL函数
2021/10/05 MySQL
Redis实战高并发之扣减库存项目
2022/04/14 Redis