在美聯航(United)飛機上使用免費Wi-Fi的探索
0. 太長不看
用GAE+GoProxy。下面是用這種方法聯網的測速結果:
1. 機上WiFi介紹
美聯航(United Airlines)大部分的國內航班上安裝了衛星Wi-Fi,其原理是飛機上的Wi-Fi路由器通過衛星連接到地面上的網路。為使用這樣的高科技,每個航班上(或按時間計算)需要購買某種套餐;否則,只能使用http://unitedwifi.com這個網站,查看航班信息,通過區域網看電影,或者付費。
這種限制包括網路層和應用層。如果目標主機的IP地址不在某個白名單中,則直接丟棄數據包。如果使用HTTP協議,它為了方便用戶付費,還會判斷域名是否在白名單中,不在則返回一個HTTP302讓用戶跳轉到http://unitedwifi.com。相反,訪問一個不在白名單上的HTTPS地址,或者使用其他任何協議,所有數據會被丟棄。
2. 簡單的漏洞
用iPhone連接到機上Wi-Fi,可以收到消息推送,但不能做其他事情。僅這一點我們無法利用,甚至還會因為收到無法回復的微信而一路都睡不好覺。我無意中發現,在某些時候,可以直接訪問Google搜索。這似乎預示著某種可以利用的漏洞。
進一步試驗發現:Google的某些服務可以使用(例如搜索),而另一些則不行(例如Gmail)。這有點奇怪,因為按理說用HTTPS訪問這些服務,路由器應該看不出URL當中的區別。問題出在Google搜索和Gmail解析到的IP地址不同,而只有某些谷歌的IP在白名單上。
我們知道谷歌的服務有一個很好的性質:DNS解析出的IP對應它的edge nodes,也就是說通過每個谷歌的IP都可以提供所有服務,由請求當中的Host值決定。於是,比如http://google.com解析到1.2.3.4,只需要在hosts文件里添加1.2.3.4 http://mail.google.com,就可以收發郵件了。
谷歌有什麼功能可以幫助我們上更多的網站?Google Translate。輸入想去的地址,選擇一個奇怪的語言(為了防止它說與原網頁相同),選擇查看原文,它會幫我們獲取這個網頁。這有些類似「網頁代理」,只能應用於靜態的網頁,不能提交表格等等。但是做到這種程度已經非常激動人心了。
產生這個現象的原因,可能是未登錄情況下的Wi-Fi還允許瀏覽幾個美聯航合作夥伴的網站,而那些網站用了谷歌的某些服務(例如字體和腳本),所以把IP添加到了白名單(因為HTTPS,不能從域名判斷)。顯然他們忘了谷歌神奇的Edge Network。
3. 還是著急
雖然通過上面的方法能簡單地和世界交流了,很多情況還是只能幹著急。比如你收到了一封郵件說考試成績可以在網上查到了,那麼你一秒鐘不想耽誤就要登錄--但是用Google Translate並不能實現。這好像比沒有Wi-Fi可用更討厭。
需要找一個谷歌提供的服務,能為我們轉發任意的流量或者至少是HTTP(S)請求。
這時我想起了中國人民的老朋友:GoAgent / GoProxy。它運行在Google App Engine上,配合客戶端提供HTTP代理服務。可以配置它使用SSL在客戶端和GAE之間傳輸數據,這樣路由器不會因為域名而拒絕;它們原本就是從一些準備好的谷歌域名來找可用的GAE IP地址,所以也很容易讓它們通過IP白名單。網上也有很簡單的搭建教程和配置好的客戶端。
於是,我們已經可以自由地使用各種HTTP(S)服務了。如果一定要用SSH,也可以試試網頁版的。儘管沒有一定要在飛機上上網的剛需,但是知道我們能做到這件事很愉快。
最後,天空上還飄著一朵小小的、令人不安的烏雲。我還是沒辦法回復微信。
如果一定要讓手機也能聯網,理論上有下面兩種方法:在手機上運行GoProxy,應該需要越獄;或者讓它通過電腦的代理上網。微信應該可以通過HTTP代理工作。然而,這種路由器不允許區域網當中的主機之間連接。恐怕需要在電腦上插另一個無線網卡作為訪問點,然後把機上Wi-Fi那個連接橋接過來給手機……
或者還有第三種方法,如果你真的很需要用:交錢。
推薦閱讀:
※ngrok - 免費的內網穿透
※探究 tcp 協議中的三次握手與四次揮手
※Python網路編程中的套接字名和DNS解析。
※計算機網路學習隨想三