php伪造referer突破网盘禁止外链

发布时间:2020-01-23编辑:脚本学堂
分享下phpphp伪造referer突破网盘禁止外链的方法,有需要的朋友参考下。

一般的国内网盘为控制流量,都会禁止网盘内的文件外链
点网盘里文件的链接一般都会转到专门的下载页面,必须从这个页面才能下载文件。
 
比如我放纳米盘里的文件http://img.namipan.com/downfile/da333ee178bdad6531d1ec1540cf86277c116b6300887600/02.paid%20in%20full.mp3

这个地址不能直接下载也不能在网页播放器里播放,点击下载转到了一个下载页面。
要想能够直接下载这个文件或播放这个文件,那就要伪造referfer,欺骗服务器,referfer是来自纳米盘的链接。

用php内置的函数stream_context_create。
 

复制代码 代码示例:
<?php
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实际上是把对方服务器的文件读取到了自己的服务器上然后再发送给浏览器,不但加大自己服务器的压力,而且下载反应速度还很慢,这个并不是很好的解决方法。

查看下php手册,既要减轻自己服务器的压力,又能达到迷惑对方服务器。修改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.0rn”);
fputs($content, “host: $domainrn”);
fputs($content, “referer: $domainrn”);//伪造referfer
fputs($content, “user-agent: mozilla/4.0 (compatible; msie 6.0; windows nt 5.1)rnrn”);

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);

原来地址: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