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 相关文章推荐
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
php跨站攻击实例分析
Oct 28 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
教大家制作简单的php日历
Nov 17 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
如何使用php生成zip压缩包
Apr 21 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 中英文语言转换类
2011/09/07 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
Python实现SVN的目录周期性备份实例
2015/07/17 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
python 输出所有大小写字母的方法
2019/01/02 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Python发送邮件实现基础解析
2020/08/14 Python
Django返回HTML文件的实现方法
2020/09/17 Python
python调用百度API实现人脸识别
2020/11/17 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
大学生冰淇淋店商业计划书
2014/01/14 职场文书
同事吵架检讨书
2014/02/05 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android