這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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環境的配置搭建,我將會在後續文章中逐步涉及。