来源:http://hi.baidu.com/aullik5/blog/item/9f551339455401f8b211c748.html
我前段时间写的那个网页代理,由于GFW封了GAE的https,所以不能用了。
这几天利用在家休假的时间,简单修改了一下。
我发现在GAE上搭建网页代理,速度还是非常快的,因为用的是google的带宽。
目前来说,TOR太慢了,还要找有效的bridge。其他类似的VPN类软件,比如 hotspot shield, 速度也非常慢,且有时候不稳定。同事的ssh tunnel也试用过,速度还是比不上GAE,而且用了一段时间被封了,杯具。自己找肉鸡做 vpn 难以维护,现在也没那个精力和闲情去找肉鸡了。
GFW目前的策略是会检测所有http request中请求的地址,如果发现违禁的网站,则限制其连接。但是对于返回的http content似乎并没有做限制。
出于这一点,之前我在GFW上搭建的代理是使用https的,最近GFW封了https,所以需要另寻出路。
很自然的就想到了点对点的通信,只要让GFW看不懂http请求中的地址,就达到了要求。
所以可以考虑在浏览器里使用js对提交的网页地址进行加密,在服务端再进行解密。
或者使用js进行混淆,在服务端再解码。
出于简单和高效的原因,我使用了混淆的形式,将所有的url全部反过来
比如 www.baidu.com 变成 moc.udiab.www
客户端js:
function convertStr(str){
var temp = new Array();
for (i=0;i<str.length;i++){
temp.push(str.charAt(str.length -1 - i));
}
return temp.join('');
}
服务端:
def convertStr(self, str):
temp = []
newStr = ''
for i in range(0, len(str)):
temp.append(str[len(str)-1-i])
for s in temp:
newStr += s
return newStr
如果未来GFW开始检测网页内容,则可以考虑混淆或加密整个http请求,在客户端再用js解密,然后把所有内容document.write 出来。
这个网页代理的代码我以前是计划开源出来,但是我一直缺乏时间和精力去维护,所以现在还只完成了一些基本功能,看看GET的网页还行,但是POST和复杂js就不支持了,而且代码也不够优雅,所以就自己用用算了。
出于法律风险的考虑,SecINN 暂时不打算提供网页代理的功能.
没有评论:
发表评论