2011-11-26

Android手機透過USB當無線基地台

Android手機可以當AP(基地台)用,但未必人人都有購買3G上網吃到飽,
所以在省錢才是王道的前題下,我們要用別的方法來讓手機當AP。

只是手機大概百分之九十九點九九九九沒有ethernet(有線網路),不過
Android手機卻可以將USB模擬成ethernet,因此我們便可以利用它來連
到桌上型或筆記型電腦來上 Internet。

首先將手機附的連接電線的一端插入PC的USB接口
接著將手機的USB啟用
設定==>無線與網路==>數據連線與可攜式無線基地台==>USB數據連線
(或者以指令來啟動:
adb shell 'echo -n 1 > /sys/devices/virtual/usb_composite/rndis/enable'
也可以)

這樣Linux會自動載入
mii, usbnet, cdc_ether, rndis_host 這四個kernel modules.

(請先讓你的手機可以有root使用身份,並殖入busybox到/system/bin/
進行方法不在本文討論範圍)

在手機的USB插入PC後,在PC執行ifconfig -a 可以看到usb0 的網路
介面出現。

執行adb shell 'busybox ifconfig'
看一下手機的usb0 是什麼IP, 例如192.168.123.10

在PC的Linux下,以root身份執行以下指令
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.123.0/24 -o eth0 -j MASQUERADE
ifconfig usb0 192.168.123.1
再來就是手機端
adb shell 'busybox route add default gw 192.168.123.1'
adb shell 'setprop net.dns1 168.95.1.1'

手機啟用AP功能
設定==>無線與網路==>數據連線與可攜式無線基地台==>可攜式Wi-Fi無線基地台
請記得設個密碼,除非你想當好鄰居

adb shell 'busybox route'
你會看到手機的routing有另一組 IP, 假設是192.168.124.0
adb shell 'iptables-1.4 -t nat -A POSTROUTING -s 192.168.124.0/24 -o usb0 -j MASQUERADE'
(或許你手機裡的 iptables 名稱不叫 iptables-1.4,你可以先adb shell
進去後打 busybox ash, 再打一下 iptable 不要按Enter 而按TAB鍵,讓它
自動補完,就知道完整名稱了)

如果不啟用手機AP模式,光是USB連線上之後,手機本身就可以上網了。

簡單整理一下要點:
1.手機啟用USB數據連線,並將連接線插到PC
2.PC上會出現usb0, 設定它的IP,並將usb0 Masquerade 到eth0 出去
3.手機啟用無線基地台模式
4.幫手機的 xxap0(以上面舉例也就是另一組IP 192.168.124.0) Masquerade 到
usb0 出去Internet.

讓手機透過PC USB上網還有一個好處就是可以做監控實驗,因為它所有封包都進
到PC 再從eth0 出去,所以可以用各種工具來觀察當你執行某個app 時,它到底是
連到哪些地方去,或者它透過網到底在幹什麼,都是很有趣的實驗。

這也有個好處,就是由USB供電,不必額外電源,另方面也能為手機保持100%滿電。

沒有留言: