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 05 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
php 浮点数比较方法详解
May 05 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
javascript cookies操作集合
2010/04/12 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
如何快速上手Vuex
2017/02/14 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
vue实现文字加密功能
2019/09/27 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
Python 字典dict使用介绍
2014/11/30 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
大学毕业生自荐书怎么写?
2014/01/06 职场文书
药品采购员岗位职责
2014/02/08 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
服务明星事迹材料
2014/12/29 职场文书
学校学期工作总结
2015/08/13 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技