Archive for September 15th, 2009

使用PHProxy访问受限网站

PHProxy(http://sourceforge.net/projects/poxy/),是一款PHP代理程序,它的好处是:让你在受限网络环境下,访问被禁止的网站,它的典型使用情况如下:

  • 如果你的公司禁止员工在上班时间上一些SNS、财经网站等,通过这个程序,可以让你绕过限制
  • 如果你想访问墙外的网站,比如Twitter、Facebook等一些人不想让你看的网站,请用PHProxy(这个是本文存在的目的)

当然不是每个人都可以使用它的,前提是:

  • 你必须有自己的web站点
  • 你的空间提供商允许你做proxy服务,坏消息是大部分空间提供商都禁止用户安装代理程序,比如我的空间商,明确规定:

Anonymous Proxies. HostMonster.Com does not allow the use of anonymous proxy scripts on its servers. They can be very abusive to the server resources, affecting all users on that server.

  • 如果你想访问墙外的网站,即使你符合上面两点也是不行的,你的网站必须位于墙外,且你必须修改一下这个程序的代码,请看下面的介绍:

安装PHProxy后,我发现,用它来访问普通网站,是没有问题的,你无需修改它的代码,但是如果你用来访问被GFW墙掉的网站,就不行了。比如:http://www.twitter.com

为什么呢?因为PHProxy首先会将你访问的网站URL,缺省进行一次Base64编码,所以twitter的URL就变成了aHR0cDovL3d3dy50d2l0dGVyLmNvbQ==,然后才进行一次URLEncode编码,变成了aHR0cDovL3d3dy50d2l0dGVyLmNvbQ%3D%3D,而这个字符串大概已经上了GFW的黑名单,不信的话,你用Google搜索下:aHR0cDovL3d3dy50d2l0dGVyLmNvbQ%3D%3D,你的浏览器立刻被重置。

知道原因就简单了,我们只要修改PHProxy,在URL->Base64 Encoder->URL Encoder这个过程后,再加上一道自己定义的编码即可,比如,你把每个字符都加1,解码的时候,再反过来做即可。GFW只会把这些知名站点的URL的用缺省编码加入黑名单,不可能把你新方法加工后的字符串也加入黑名单,因为太多了。

下面做个实际的例子,比如我们可以在编码URL后,将前2位调换到尾部,解码的时候做相反的操作:

else if ($_flags['base64_encode'])
{
    function encode_url($url)
    {
        $tmp = rawurlencode(base64_encode($url));   
        $head = substr($tmp, 0, 2);
        $tail = substr($tmp, 2);
        return $tail.$head;

        // return rawurlencode(base64_encode($url));    
    }
    function decode_url($url)
    {
        $head = substr($url, -2);
        $tail = substr($url, 0, strlen($url) -2);
        $url = $head.$tail;
       
        return str_replace(array(‘&’, ‘&’), ‘&’, base64_decode(rawurldecode($url)));
    }
}

上面的代码,我已经验证,可以逃过GFW的封锁。你可以用你自己的喜欢的方式,替换绿色的部分。

注:PHProxy还可以使用ROT13编码,但同样也被屏蔽了,请做同样的Hack。

[ad]

Switch to our mobile site