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 相关文章推荐
实用函数5
Nov 08 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
PHP四大安全策略
Mar 12 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
Jul 04 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
php的一些小问题
2010/07/03 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php递归json类实例
2014/12/02 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
Javascript的闭包
2009/12/31 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
js 走马灯简单实例
2013/11/21 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
python代码制作configure文件示例
2014/07/28 Python
Python判断字符串与大小写转换
2015/06/08 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python适合做数据挖掘吗
2020/06/16 Python
Python进行特征提取的示例代码
2020/10/15 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
小学感恩教育活动总结
2014/07/07 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
python神经网络 使用Keras构建RNN训练
2022/05/04 Python