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 相关文章推荐
一个odbc连mssql分页的类
Oct 09 PHP
php中http_build_query 的一个问题
Mar 25 PHP
PHP安全性漫谈
Jun 28 PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
PHP面试题之文件目录操作
Oct 15 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 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输出数组中重名的元素的几种处理方法
2012/09/05 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
django 通过url实现简单的权限控制的例子
2019/08/16 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
Java servlet面试题
2012/03/04 面试题
工作过失检讨书
2014/02/23 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
科技节口号
2014/06/19 职场文书
市场营销毕业求职信
2014/08/07 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
网络营销计划书
2015/01/17 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
Javascript 解构赋值详情
2021/11/17 Javascript