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 相关文章推荐
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
PHP+jQuery实现自动补全功能源码
May 15 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
preg_match_all使用心得分享
Jan 31 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
PHP获取文件行数的方法
Jun 10 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
Apr 26 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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
ThinkPHP采用模块和操作分析
2011/04/18 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
通过JAVAScript实现页面自适应
2007/01/19 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python使用python-docx读写word文档
2019/08/26 Python
Django获取应用下的所有models的例子
2019/08/30 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
高中打架检讨书
2014/02/13 职场文书
《凡卡》教学反思
2014/04/09 职场文书
鉴定评语大全
2014/05/05 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
会员卡清退活动总结
2014/08/27 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
Python Matplotlib绘制动画的代码详解
2022/05/30 Python