用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 实例化类的一点摘记
Mar 23 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
举例讲解PHP面对对象编程的多态
Aug 12 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 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中使用unset销毁变量并内存释放问题
2012/07/05 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
Jquery iframe内部出滚动条
2010/02/11 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
django 自定义用户user模型的三种方法
2014/11/18 Python
Python中的列表知识点汇总
2015/04/14 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
携程英文网站:Trip.com
2017/02/07 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
四好少年事迹材料
2014/01/12 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
项目建议书格式
2014/03/12 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
公司保洁员管理制度
2015/08/04 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript