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+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
PHP比你想象的好得多
Nov 27 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
php定期拉取数据对比方法实例
Sep 22 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php继承的一个应用
2011/09/06 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
JSONP原理及应用实例详解
2018/09/13 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
Python中使用ElementTree解析XML示例
2015/06/02 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
Html5定位终极解决方案
2020/02/05 HTML / CSS
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
教师自荐信
2013/12/10 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
公司应聘求职信
2014/06/21 职场文书
宣传标语大全
2014/07/01 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
发布会邀请函
2015/01/31 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
python如何利用traceback获取详细的异常信息
2021/06/05 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers