php判断ip黑名单程序代码实例


Posted in PHP onFebruary 24, 2014

学校的新闻系统要求有些新闻只开放校内ip浏览,于是重写了一个代码来实现此功能,实现后的结果是,只要把允许访问的ip列入ip.txt这个文件中即可,同时支持c类ip,例如:

ip.txt
192.168
211.67.188
211.67.191.25
代码如下:

/*
* ip地址黑名单、白名单
* 判断访客地址的ip是否在ip.txt中,支持c类ip
* By xhat
*/
$ip = $_SERVER['REMOTE_ADDR'];
$ipArray = preg_replace("#rn?|n#","",file('ip.txt'));
foreach ($ipArray as $ipTest) {
if (substr_count($ip, $ipTest) != "0") {
echo "ok"; //执行相关命令
die();
}
}
?>

上面大家可以使用代码来骗过了,下面代码进行升级

<?php 
class block_ip { 
var $Block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*"); 
function __construct(){ 
} 
function __destruct(){ 
} 
private function makePregIP($str){ 
if (strstr($str,"-")) { 
$aIP = explode(".",$str); 
foreach ($aIP as $k=>$v) { 
if (!strstr($v,"-")) { 
$preg_limit .= makePregIP($v); 
} else{ 
$aipNum = explode("-",$v); 
for($i=$aipNum[0];$i<=$aipNum[1];$i++){ 
$preg .=$preg?"|".$i:"[".$i; 
} 
$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]"; 
} 
} 
}else{ 
$preg_limit .= $str."."; 
} 
return $preg_limit; 
} 
private function getAllBlockIP(){ 
if ($this->Block_ip) { 
foreach ($this->Block_ip as $k=>$v) { 
$ipaddres = $this->makePregIP($v->start_ip); 
$ip = str_ireplace(".",".",$ipaddres); 
$ip = str_replace("*","[0-9]{1,3}",$ip); 
$ipaddres = "/".$ip."/"; 
$ip_list[] = $ipaddres; 
} 
} 
return $ip_list; 
} 
public function checkIP() { 
$iptable = $this->getAllBlockIP(); 
$IsJoined = true; 
//取得用户ip 
$Ip = $this->get_client_ip(); 
$Ip = trim($Ip); 
//剔除黑名单中的IP区段 
if ($iptable) { 
foreach($iptable as $value) { 
if (preg_match("{$value}",$Ip)) { 
$IsJoined = false; 
break; 
} 
} 
} 
// 如果在ip黑名单中就执行如下操作 
if( !$IsJoined ){ 
echo "IP Error"; 
exit; 
} 
} 
private function get_client_ip(){ 
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
$ip = getenv("REMOTE_ADDR"); 
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
$ip = $_SERVER['REMOTE_ADDR']; 
else 
$ip = "unknown"; 
return($ip); 
} 
} 
?>

引用片段:

$oBlock_ip = new block_ip(); 
$oBlock_ip->checkIP();
PHP 相关文章推荐
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
YII框架关联查询操作示例
Apr 29 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
Sep 23 PHP
thinkphp的c方法使用示例
Feb 24 #PHP
php根据操作系统转换文件名大小写的方法
Feb 24 #PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 #PHP
thinkphp控制器调度使用示例
Feb 24 #PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 #PHP
将php数组输出html表格的方法
Feb 24 #PHP
php格式化日期和时间格式化示例分享
Feb 24 #PHP
You might like
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
Django开发中的日志输出的方法
2018/07/02 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
python中pyqtgraph知识点总结
2021/01/26 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
发票退票证明
2015/06/24 职场文书
返乡农民工证明
2015/06/24 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android