指穷于为薪,火传也,不知其尽也。—《养生主》

Daily English:Experience must be bought.

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

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

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

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

Language:  PHP
< ?
if (strlen($_GET['url'])>0){
  $url1=str_rot13($_GET['url']);
  preg_match('/\\/([^\\/]+)$/',$url1,$a);
  $handle = @fopen($url1, "rb");
  if (!$handle) exit('open error');
  header("Content-type: application/octet-stream");
  Header("Accept-Ranges: bytes"); 
  $buffer="";
  while (!feof($handle)) {
    $buffer .= fread($handle,8192);
    set_time_limit(30);
  }
  Header("Accept-Length: ".strlen($buffer)); 
  Header("Content-Disposition: attachment; filename=".$a[1] ); 
  echo $buffer;
  fclose($handle);
}
else{
?>
<script type='text/javascript'>
String.prototype.rot_13 = function(){
  var rot = [
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'];
  return this.replace(/([a-z])/gi,function(a0,a1){return rot[1].substr(rot[0].indexOf(a1),1)});
}
</script>
<input name="url" id='url'/>
<input type='button' onclick='document.getElementById("ttt").innerHTML=document.location.href+"?url="+escape(document.getElementById("url").value.rot_13());' value='submit'/>
<div id='ttt'></div>
< ?
}
?>

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

分享家:Addthis中国

Leave a comment for: "绕过公司防火墙的禁止下载"

*

Tag Cloud