2011年4月8日 星期五

Android上使用SSH tunnel翻墙

目前大部分的手機翻牆都是用的VPN,如果可以實現SSH Tunnel,我就可以像PC那樣利用美國的主機服務了。 还需要探索一下。 還需要探索一下。 这篇文章是个很好的引子。 這篇文章是個很好的引子。

目前在PC上使用SSH tunnel翻墙是一个相当广泛使用的方案,国外SSH帐号的获取不是太难,购买起来价格也比VPN帐号要便宜。目前在PC上使用SSH tunnel翻牆是一個相當廣泛使用的方案,國外SSH帳號的獲取不是太難,購買起來價格也比VPN帳號要便宜。 但是在智能手机上目前还不能使用SSH方案,只能用VPN。但是在智能手機上目前還不能使用SSH方案,只能用VPN。 Android系统是基于Linux的,特别是root了之后,基本上要玩什么都随心所欲了。 Android系統是基於Linux的,特別是root了之後,基本上要玩什麼都隨心所欲了。 因此Android上是应该也可以使用SSH tunnel的。因此Android上是應該也可以使用SSH tunnel的。

 先看看Windows上是怎样设置SSH翻墙的:先看看Windows上是怎樣設置SSH翻牆的:
  • 首先需要有个支持dynamic port forwarding的SSH client,这个SSH client能开放出SOCKS服务首先需要有個支持dynamic port forwarding的SSH client,這個SSH client能開放出SOCKS服務
  • 如果浏览器(或者其他程序)支持使用SOCKS proxy,设置使用SSH client开放出来的SOCKS端口,就可以使用了如果瀏覽器(或者其他程序)支持使用SOCKS proxy,設置使用SSH client開放出來的SOCKS端口,就可以使用了
  • 如果浏览器(或者其他程序)不支持SOCKS proxy,只支持HTTP proxy,就需要再运行一个支持SOCKS的代理程序(例如Privoxy),将HTTP转成SOCKS如果瀏覽器(或者其他程序)不支持SOCKS proxy,只支持HTTP proxy,就需要再運行一個支持SOCKS的代理程序(例如Privoxy),將HTTP轉成SOCKS
在Android上就要麻烦一点了,因为需要网络通讯的不仅仅是浏览器,很多Android application都需要访问网络,但是它们并不支持proxy——连HTTP proxy都不支持,更不用说SOCKS了。在Android上就要麻煩一點了,因為需要網絡通訊的不僅僅是瀏覽器,很多Android application都需要訪問網絡,但是它們並不支持proxy——連HTTP proxy都不支持,更不用說SOCKS了。 它们只会直接连接目标站点,如图中虚线所示,然后撞墙。它們只會直接連接目標站點,如圖中虛線所示,然後撞牆。

但是Linux有iptables,可以设置iptables规则(需要root权限),将HTTP/HTTPS请求forward到一个transparent SOCKS proxy去。但是Linux有iptables,可以設置iptables規則(需要root權限),將HTTP/HTTPS請求forward到一個transparent SOCKS proxy去。 transparent SOCKS proxy的作用是将任意TCP连接转成SOCKS连接,这样就可以走SSH tunnel出去了。 transparent SOCKS proxy的作用是將任意TCP連接轉成SOCKS連接,這樣就可以走SSH tunnel出去了。 我分析过几乎所有的Android应用访问网络都是走HTTP/HTTPS协议的,所有仅仅处理HTTP/HTTPS就够了。我分析過幾乎所有的Andr​​oid應用訪問網絡都是走HTTP/HTTPS協議的,所有僅僅處理HTTP/HTTPS就夠了。
Android上支持dynamic port forwarding的SSH client有ConnectBot ,不过ConnectBot是一个有界面的应用,似乎不能由其他程序来控制,这样就不好做到翻墙软件的傻瓜化了。 Android上支持dynamic port forwarding的SSH client有ConnectBot ,不過ConnectBot是一個有界面的應用,似乎不能由其他程序來控制,這樣就不好做到翻牆軟件的傻瓜化了。 应该还是弄一个命令行的ssh client更合适。應該還是弄一個命令行的ssh client更合適。

在网上搜索了一下,开源的transparent SOCKS proxy有几个: transocks_evTranSocksredsocks在網上搜索了一下,開源的transparent SOCKS proxy有幾個: transocks_evTranSocksredsocks从文档上看,似乎transocks_ev比较适合。從文檔上看,似乎transocks_ev比較適合。

但是,我现在面临的困难在于我不熟悉如何交叉编译Android平台程序(C语言),了解了一下如何搭建Android交叉编译环境,似乎挺麻烦(对我而言)。但是,我現在面臨的困難在於我不熟悉如何交叉編譯Android平台程序(C語言),了解了一下如何搭建Android交叉編譯環境,似乎挺麻煩(對我而言)。 而且要让普通Linux上可运行的sshd和transocks port到Android上,也许还有一些代码要修改。而且要讓普通Linux上可運行的sshd和transocks port到Android上,也許還有一些代碼要修改。 不知道有没有Android系统高手能够帮忙?不知道有沒有Android系統高手能夠幫忙?

題外話~
四個實用SSH and Telnet android app如下;
1. SSHtunnel
2. connectBot
3. Better Terminal Emulator Android
4. Android Terminal Emulator

沒有留言:

張貼留言

歡迎熱愛 Puzzle and Dragons 的玩家一起上來討論及研究各種降臨打法。

進擊的 Puzzle and Dragons Facebook 專頁現已開幕 ~ 歡迎大家上去追查各種新舊貼。 Enjoy your Puzzle and Dragons