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 相关文章推荐
第九节 绑定 [9]
Oct 09 PHP
基于xcache的配置与使用详解
Jun 18 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
php中smarty区域循环的方法
Jun 11 PHP
PHP实现的购物车类实例
Jun 17 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
PHP7 标准库修改
Mar 09 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
php提取字符串中网站url地址的方法
2014/12/03 PHP
javascript 写类方式之一
2009/07/05 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
浅析vue深复制
2018/01/29 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
mpvue实现左侧导航与右侧内容的联动
2019/10/21 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
pyramid配置session的方法教程
2013/11/27 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
金士达面试非笔试
2012/03/14 面试题
电大自我鉴定范文
2013/10/01 职场文书
物流管理专业应届生求职信
2013/11/21 职场文书
学生喝酒检讨书
2014/02/06 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
色戒观后感
2015/06/12 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
创业计划书之废品回收
2019/09/26 职场文书