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制作静态网站的模板框架(二)
Oct 09 PHP
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
PHP可变函数学习小结
Nov 29 PHP
PHP观察者模式原理与简单实现方法示例
Aug 25 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
实例讲解PHP表单
Jun 10 PHP
PHP中的异常处理机制深入讲解
Nov 10 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
php 获取完整url地址
2008/12/20 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
Python深度优先算法生成迷宫
2018/01/22 Python
python 堆和优先队列的使用详解
2019/03/05 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
python实现快递价格查询系统
2020/03/03 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
win10安装python3.6的常见问题
2020/07/01 Python
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
基层工作经历证明
2014/01/13 职场文书
1亿有多大教学反思
2014/05/01 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
员工团队活动方案
2014/08/28 职场文书
调任通知
2015/04/21 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
Django框架中模型的用法
2022/06/10 Python