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 相关文章推荐
对Session和Cookie的区分与解释
Mar 16 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
php 如何获取数组第一个值
Aug 06 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 PHP
php去除deprecated的实例方法
Nov 17 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
Zerg兵种介绍
2020/03/14 星际争霸
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
php事件驱动化设计详解
2016/11/10 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
python中的字典详细介绍
2014/09/18 Python
python实现上传下载文件功能
2020/11/19 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python设置环境变量的作用整理
2020/02/17 Python
python实现的分层随机抽样案例
2020/02/25 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
中国电视购物:快乐购
2017/02/04 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
数控技术学生的自我评价
2014/02/15 职场文书
会计专业求职信范文
2014/03/16 职场文书
银行委托书范本
2014/04/04 职场文书
关于迟到的检讨书
2015/05/06 职场文书
2015年网管个人工作总结
2015/05/22 职场文书