用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 相关文章推荐
Banner程序
Oct 09 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
PHP asXML()函数讲解
Feb 03 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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查询结果中文显示乱码解决方法
2013/10/25 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
商务英语专业求职信范文
2014/01/28 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
主题婚礼策划方案
2014/02/10 职场文书
应届生自荐信范文
2014/02/21 职场文书
测量工程专业求职信
2014/02/24 职场文书
行政助理工作职责范本
2014/03/04 职场文书
临床医师个人自我评价
2014/04/06 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
劳动模范获奖感言
2015/07/31 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
Python中三种花式打印的示例详解
2022/03/19 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android