GoAgent对于每一个可以登上 blogger.com 的孩纸来说也许并不陌生。出于好奇,我准备学习学习它的工作原理,并打算自己动手写一个类似的东西。当然,前提不是照抄了。我打算记录下整个学习和实现它的过程,但由于能力有限,之中难免会出现错误,希望发现的童鞋可以帮忙指正。如果即使自己没能详尽的弄明白它的编程思想和手段,自己也要写出一个可以实现它的功能的近似的东西。
开始之前,我应该感谢一下阮成雄同学。他把GoAgent介绍给了我,才让我实现了“跨过长城,走向世界”的梦想。
如果你没有听说过GoAgent,但平日里苦于无数次的“连接被重置”错误,它将是你的终极解决方案。这里,我不想介绍它的安装和使用过程,需要的同学可以参考GoAgent图文设置教程,或是在code.google.com中搜索Goagent,这里有关于它的一切资料。你会惊奇的发现,它支持Android,iOS,OpenWRT等好多系统。尽情的享受自由的网络吧,只要记住它的实现是借助于Google的技术和开源软件作者们的辛苦就好。
我将分小节简述它的原理和实现过程。今天大概谈谈它的工作原理,要实现它需要什么技术和环境。后续小节中,主要介绍我对它的实现过程,估计会有python学习笔记,介绍python的环境搭建,基本语法,参考资料等;代理的原理和实现,应该会有C#和python两种实现过程;GAE的开发介绍,会有它的环境搭建和案例演示;GAE端的实现,主要是python版,但由于自己比较熟悉Java,也可以考虑再改写一个Java版本的;最后应该会有一个总结性的文字,有一些技术总结,后续工作,感想之类的东西。当然,这些都是近期的打算,具体能否实现还要看自己精力和时间而定。
进入主题。
GoAgent的结构其实很简单。通过对它的配置和使用来看,它的基本结构应该是这样的:
图一:GoAgent实现原理示意图
正常上网的情况是下面这条红色的路径。由于网络一般通过明文通信,且需要请求公共的DNS服务器。当你请求的内容被认为不符合规矩时,长城牌防火墙就会阻断你的请求数据。
于是,GoAgent仅仅是简单的通过Google GAE API绕过了GFW。它的原理是在自己的本机安装client代理,将你需要请求的数据通过浏览器的代理设置,重新定向到了图中的Client端。client加密你的数据,并将其发送到GAE的Server端,在那里Server将数据解密,帮助你请求需要的数据,并回传给Client。
可以发现,在配置GoAgent时,主要需要两部分操作。Server的配置上传操作和浏览器端的更改代理设置操作。上网时,只要打开local中的client程序就可以畅通无阻了。而其他的那些洋洋洒洒的篇幅,主要是教你Google账号的设置和GAE的申请设置,如果你熟悉它们,完全可以略过。
应该清楚实现它的方法了。编写两部分软件,做好它们之间的通信就即可。client端的实现可以用任何语言。GoAgent选择了Python,并利用Python优秀的跨平台特性,实现了对各种操作系统(包括手机和路由设备)的支持。GAE程序开发支持三种语言:Python,Java和google自己的Go。我自己的目标是完成这个小程序后,熟悉Python语言,因此,Python将是这一系列文章的主要实现语言。
关于如何配置和使用Python,以及GAE环境的配置搭建,我将会在后续文章中逐步涉及。