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 相关文章推荐
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
php采集时被封ip的解决方法
Aug 29 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
PHP中使用BigMap实例
Mar 30 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
PHP随机数 C扩展随机数
May 04 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 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 magic quotes的详解
2013/06/17 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
js实现可旋转的立方体模型
2016/10/16 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
angular多语言配置详解
2019/05/16 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
python爬取微博评论的实例讲解
2021/01/15 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
售后专员岗位职责
2013/12/08 职场文书
新驾驶员个人自我评价
2014/01/03 职场文书
超市5.1促销活动
2014/01/15 职场文书
写自荐信的注意事项
2014/03/09 职场文书
超越自我演讲稿
2014/05/21 职场文书
社区工作者演讲稿
2014/05/23 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
自主招生英文自荐信
2015/03/25 职场文书