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注入点构造代码
Jun 14 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php array_keys 返回数组的键名
Oct 25 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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 简易输出CSV表格文件的方法详解
2013/06/20 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
JavaScript代码实现简单计算器
2020/12/27 Javascript
linux 下实现python多版本安装实践
2014/11/18 Python
python实现飞机大战
2018/09/11 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python实现字典嵌套列表取值
2019/12/16 Python
pycharm的python_stubs问题
2020/04/08 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
python opencv实现简易画图板
2020/08/27 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
Python类class参数self原理解析
2020/11/19 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
大三学习计划书范文
2014/05/02 职场文书
环保倡议书100字
2014/05/15 职场文书
小学教师师德承诺书
2014/05/23 职场文书
十周年庆典策划方案
2014/06/03 职场文书
网络技术专业求职信
2014/07/13 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
实习协议书
2015/01/27 职场文书
邀请函怎么写
2015/01/30 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
关于MySQL中的 like操作符详情
2021/11/17 MySQL