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 相关文章推荐
mysql+php分页类(已测)
Mar 31 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
Zend Framework处理Json数据方法详解
Dec 09 PHP
php格式化时间戳
Dec 17 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP图片水印类的封装
Jul 06 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
PHP中rename()函数的妙用讲解
Feb 28 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基础知识:类与对象(5) static
2006/12/13 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python的subprocess模块总结
2014/11/07 Python
简单的Python的curses库使用教程
2015/04/11 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
2014年计算机专业个人自我评价
2014/01/19 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
简爱读书笔记
2015/06/26 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书