• 技术文章 >php教程 >php手册

    用PHP伪造referer突破网盘禁止外连的代码

    2016-06-13 12:28:47原创481
    比如我放纳米盘里的文件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信息就可以了。

    改版后的代码如下:
    $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
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:轻松修复Discuz!数据库 下一篇:使用PHP的日期与时间函数技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 挑战最棒的留言本的源码(三)• 建立文件交换功能的脚本(二)• 简化的实现方法(限制为同一会话页面)• ajax跳转传参• PHP5中Cookie与 Session使用详解_php基础
    1/1

    PHP中文网