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 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
支持php4、php5的mysql数据库操作类
Jan 10 PHP
关于php fread()使用技巧
Jan 22 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
Sep 16 PHP
Java中final关键字详解
Aug 10 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 PHP
详解thinkphp的Auth类认证
May 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 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
完美的php分页类
2017/10/24 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
python try...finally...的实现方法
2020/11/25 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
期末自我鉴定
2014/01/23 职场文书
写求职信有什么意义
2014/02/17 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
美丽心灵观后感
2015/06/01 职场文书
银行培训心得体会范文
2016/01/09 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL