用PHP伪造referer突破网盘禁止外连的代码


Posted in PHP onJune 15, 2008

比如我放纳米盘里的文件http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3

这个地址不能直接下载也不能在网页播放器里播放,点击下载转到了一个下载页面。要想能够直接下载这个文件或播放这个文件,那就要伪造referfer,欺骗服务器,referfer是来自纳米盘的链接。

最开始使用的方法是用PHP内置的函数stream_context_create。

代码如下: 

function referfile($url, $refer=”) { 
$opt=array('http'=>array('header'=>”Referer: $refer”)); 
$context=stream_context_create( $opt); 
return file_get_contents($url,false, $context); 
}

但这段代码有个缺点,file_get_contents实际上是把对方服务器的文件读取到了自己的服务器上然后再发送给浏览器,不但加大自己服务器的压力,而且下载反应速度还很慢,这个并不是很好的解决方法。

后来又看了遍手册,既要减轻自己服务器的压力,又能达到迷惑对方服务器。修改header里的Referfer信息就可以了。

改版后的代码如下:

<?php 
$url="img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.Paid%20In%20Full.mp3";//这里的url要过滤掉http:// 
$urlarr=explode("/",$url); 
$domain=$urlarr[0];//分解出域名 
$getfile=str_replace($urlarr[0],",$url); 
$content = @fsockopen("$domain", 80, $errno, $errstr, 12);//先连接上对方的服务器 
if (!$content){//无法链接就提示错误信息 
die("对不起,无法连接上 $domain 。"); 
} 
fputs($content, "GET $getfile HTTP/1.0\r\n"); 
fputs($content, "Host: $domain\r\n"); 
fputs($content, "Referer: $domain\r\n");//伪造referfer 
fputs($content, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n"); while (!feof($content)) { 
$tp.=fgets($content, 128);将头部信息读取出来,里面将包含:Location:http://xxx/xxx.mp3,我们要的就是这个地址。 
} 
$arr=explode("\n",$tp); 
$arr1=explode("Location: ",$tp); 
$arr2=explode("\n",$arr1[1]);//分解出Location:后面的地址 
header('Content-Type:application/force-download'); 
header("location:".$arr2[0]); 
fclose($content);

OK,目的达到了。

这个原来的地址:http://img.namipan.com/downfile/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratyr-02-Wingthors_Hammer.mp3

转换后:

http://mms.music.krmcn.com/mms.music/namipan/img~~/3a7c64518d46d986283eab73175a8b119305a76480b89200/Equilibrium-Turis_Fratyr-02-Wingthors_Hammer.mp3

附另外一段实现代码:

最原始的破解网盘限制外链的php代码,如果各位想要学习研究可以继续看,如果要拿代码直接用需要改进,这个代码仅供参考学习。

新建一个文件file.php。后面的参数就是需要伪造referfer的目标地址吧。如:file.php/http://www.xxx.xxx/xxx.mp3

<? 
$url=str_replace('/file.php/','',$_SERVER["REQUEST_URI"]);//得出需要转换的网址。这里我就偷懒,不做安全检测了,需要的自己加上去 
$downfile=str_replace(" ","%20",$url);//替换空格之类,可以根据实际情况进行替换 
$downfile=str_replace("http://","",$downfile);//去掉http:// 
$urlarr=explode("/",$downfile);//以"/"分解出域名 
$domain=$urlarr[0];//域名 
$getfile=str_replace($urlarr[0],'',$downfile);//得出header中的GET部分 
$content = @fsockopen("$domain", 80, $errno, $errstr, 12);//连接目标主机 
if (!$content){//链接不上就提示错误 
die("对不起,无法连接上 $domain 。"); 
} 
fputs($content, "GET $getfile HTTP/1.0\r\n"); 
fputs($content, "Host: $domain\r\n"); 
fputs($content, "Referer: $domain\r\n");//伪造部分 
fputs($content, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n"); while (!feof($content)) { 
$tp.=fgets($content, 128); 
if (strstr($tp,"200 OK")){ //这里要说明一下。header的第一行一般是请求文件的状态。具体请参照HTTP 1.1状态代码及其含义hi.baidu.com/110911/blog/item/21f20d2475af812ed50742c5.html这里 是正常的文件请求状态,只需直接转向就可以。其他状态的继续执行程序 
header("Location:$url"); 
die(); 
} 
} 
//302 转向,大部分的防盗链系统都是先判断referfer,对了的话再转向真实的地址。下面就是获取真实的地址。 
$arr=explode("\n",$tp); 
$arr1=explode("Location: ",$tp);//分解出Location后面的真时地址 
$arr2=explode("\n",$arr1[1]); 
header('Content-Type:application/force-download');//强制下载 
header("location:".$arr2[0]);//转向目标地址 
die(); 
?>

115网盘图片外链测试(不是我做的):原版地址:http://u.115.com/file/f3b7c9046
外链地址:http://115.pp.ru/f3b7c9046/02.jpg

115网盘外链测试2(也不是我做的):http://gg.org.ru/115.php/提取码/xxx

PHP 相关文章推荐
PHP树的代码,可以嵌套任意层
Oct 09 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
PHP中文乱码解决方案
Mar 05 PHP
PHP加密解密实例分析
Dec 25 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 PHP
php学习 字符串课件
Jun 15 #PHP
php学习 函数 课件
Jun 15 #PHP
PHP学习 运算符与运算符优先级
Jun 15 #PHP
坏狼php学习 计数器实例代码
Jun 15 #PHP
坏狼的PHP学习教程之第2天
Jun 15 #PHP
坏狼的PHP学习教程之第1天
Jun 15 #PHP
Php注入点构造代码
Jun 14 #PHP
You might like
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
javascript中的new使用
2010/03/20 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
企业办公室岗位职责
2014/03/12 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
中学生励志演讲稿
2014/04/26 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
小学教师自我评价
2015/03/04 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技