用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的单引号和双引号 字符串效率
May 27 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
php mysql 封装类实例代码
Sep 18 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
PHP操作XML中XPath的应用示例
Jul 04 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
python学习基础之循环import及import过程
2018/04/22 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
Python类中self参数用法详解
2020/02/13 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
护士自荐信
2013/10/25 职场文书
护士自我鉴定总结
2014/03/24 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
房地产活动策划方案
2014/05/14 职场文书
奥林匹克的口号
2014/06/13 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
作风建设整改方案
2014/10/27 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
清明节随笔
2015/08/15 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python