用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 5.0对象模型深度探索之绑定
Sep 05 PHP
用PHP读取IMAP邮件
Oct 09 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
php对数组排序的简单实例
Dec 25 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php图片添加水印例子
Jul 20 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
TP3.2框架分页相关实现方法分析
Jun 03 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采集相关教程之一 CURL函数库
2010/02/15 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
tensorflow 环境变量设置方式
2020/02/06 Python
什么是python的必选参数
2020/06/21 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
公证委托书大全
2014/04/04 职场文书
师德师风建设方案
2014/05/08 职场文书
幸福家庭标语
2014/06/27 职场文书
为自己工作观后感
2015/06/11 职场文书
秋季运动会加油词
2015/07/18 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技