凡事总要有信心,老想着“行”。要是做一件事,先就担心着:“怕不行吧?”那你就没有勇气了。 —— 盖叫天

日记列表


  • 天气
  • 2006年11月06日 21:30 星期一

绕过公司防火墙的禁止下载

来新公司上班第二天了,一切都还习惯,唯一不习惯的就是:居然没法下载……

原来以为公司使用了什么高级技术,后来发现,只有下载文件的后缀名是rar、exe、zip之类的才会被屏蔽掉,而在微软网站上下载msn live一点影响都没,由此估计服务端只是限制了特定地址的下载,而没有进行更深入的限制。

本着自己动手,丰衣足食的精神,我写了段代码,用来将下载地址采用rot13(字母ascii码往后移13位,这样两次运算之后就能恢复原样)转换之后,作为参数,也方便flashget下载。由于代码很简单,就不多解释了,如下:

Language:php, parsed in: 0.049 seconds, using GeSHi 1.0.7.12
  1. <?
  2. if (strlen($_GET['url'])>0){
  3.   $url1=str_rot13($_GET['url']);
  4.   preg_match('/\/([^\/]+)$/',$url1,$a);
  5.   $handle = @fopen($url1, "rb");
  6.   if (!$handle) exit('open error');
  7.   header("Content-type: application/octet-stream");
  8.   Header("Accept-Ranges: bytes");
  9.   $buffer="";
  10.   while (!feof($handle)) {
  11.     $buffer .= fread($handle,8192);
  12.     set_time_limit(30);
  13.   }
  14.   Header("Accept-Length: ".strlen($buffer));
  15.   Header("Content-Disposition: attachment; filename=".$a[1] );
  16.   echo $buffer;
  17.   fclose($handle);
  18. }
  19. else{
  20. ?>
  21. <script type='text/javascript'>
  22. String.prototype.rot_13 = function(){
  23.   var rot = [
  24. 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
  25. 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'];
  26.   return this.replace(/([a-z])/gi,function(a0,a1){return rot[1].substr(rot[0].indexOf(a1),1)});
  27. }
  28. </script>
  29. <input name="url" id='url'/>
  30. <input type='button' onclick='document.getElementById("ttt").innerHTML=document.location.href+"?url="+escape(document.getElementById("url").value.rot_13());' value='submit'/>
  31. <div id='ttt'></div>
  32. <?
  33. }
  34. ?>
  35.  

不过需要注意的是:对于那些有防盗链措施的下载文件,没办法下载……另外,别打算用这么简单的代码来下载几百兆的文件,即使不会超时,等都会等死人的。

昵称*:

邮箱 :

主页 :

  • :)
  • :o
  • :D
  • ;)
  • :p
  • :mad:
  • :confused:
  • :(
  • :rolleyes:
  • :cool:
  • :eek: