android通过USB使用ubuntu的ipv4网络
再明确下标题: 电脑能上网, 通过USB接口, 共享给没网的手机用.
物理连接
手机通过 USB 连接电脑, 并打开 usb 网络共享(或者叫 usb 以太网).
默认情况下, 共享的方向跟我们想要的是相反的.
查看当前的网络接口情况
在电脑上执行 ifconfig
可以看到网络接口的信息.确认下 usb 接口的设备名, 以及能提供互联网接入能力的接口的设备名(一般插网线上网的话会是eth0, 用 wifi上网的话会是 wlan0)
假设: usb 接口名字叫 usb1, 电脑通过 wlan0 接口上网.
配置过程
电脑上的配置
-
切换到 root 用户
- 启用 ipv4 的转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
- 添加 NAT:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
- 给 usb1 接口分配 ip 地址:
ifconfig usb1 192.168.42.121 netmask 255.255.255.0 up
另: 查看NAT表项:
iptables --table nat -L POSTROUTING
手机上的设置
- 通过 adb shell 控制设备
su
切换到 root 权限- 添加默认网关(电脑上 usb1 的 ip 地址):
busybox route add default gw 192.168.42.121
自动化脚本
按自己的系统环境修改一下变量, 在 root 用户下运行:
interface_with_net=wlan0
interface_need_net=usb1
ip_for_interface_need_net=192.168.42.121
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $interface_with_net -j MASQUERADE
ifconfig $interface_need_net $ip_for_interface_need_net netmask 255.255.255.0 up
adb_path=/home/chenyan/android-sdk-linux/platform-tools/adb
device_name=CB5A1GRUNT
echo busybox route add default gw $ip_for_interface_need_net
$adb_path -s $device_name shell