用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 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
Zend Framework处理Json数据方法详解
Dec 09 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
php服务器的系统详解
Oct 12 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中的foreach问题
2013/06/30 PHP
php实现微信支付之退款功能
2018/05/30 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解Python中for循环的使用
2015/04/14 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python 调用Java实例详解
2017/06/02 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
Python 忽略文件名编码的方法
2020/08/01 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
DNA测试:Orig3n
2019/03/01 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
个人求职信范文分享
2013/12/13 职场文书
机关搬迁方案
2014/05/18 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
运动会观后感
2015/06/09 职场文书
十八大观后感
2015/06/12 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
一行Python命令实现批量加水印
2022/04/07 Python