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 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
php三元运算符知识汇总
Jul 02 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
PHP读取文件或采集时解决中文乱码
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
PHP中的CMS的涵义
2007/03/11 PHP
PHP5中虚函数的实现方法分享
2011/04/20 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
Python导入模块时遇到的错误分析
2017/08/30 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
django 删除数据库表后重新同步的方法
2018/05/27 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
应届专科生个人的自我评价
2014/01/05 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
测量员岗位职责
2015/02/14 职场文书
车间安全生产管理制度
2015/08/06 职场文书
导游词之太湖
2019/10/08 职场文书
python入门之算法学习
2021/04/22 Python
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android