用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和ACCESS写聊天室(六)
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
PHP 写文本日志实现代码
May 18 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
OpenLayers3实现测量功能
2020/09/25 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
网络工程师个人的自我评价范文
2013/10/01 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
党支部半年考察意见
2015/06/01 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
Js类的构建与继承案例详解
2021/09/15 Javascript
MySQL读取JSON转换的方式
2022/03/18 MySQL
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL