我正在尝试为我的Android应用设置测试环境,其中单独的设备需要Internet连接,但没有无线功能。
所以我决定使用usb反向网络共享。我的主机正在运行Ubuntu。我已设法为一台设备设置反向网络共享,连接正常,我可以通过此设备的adb shell ping google.com。
当我连接第二个设备时,第一个绑定停止工作。 两个设备在其内部usb0接口上配置了相同的IP地址。
这是我到目前为止所拥有的:
主机端口转发已激活
echo 1 > /proc/sys/net/ipv4/ip_forward
Iptables规定主机路由流量:
iptables -t nat -A POSTROUTING -s 169.254.255.2/24 -j MASQUERADE
插件第一个设备:
ifconfig shows the device on usb0 @ ip 169.254.255.2/30
在第一台设备上(使用adb shell)
> route add default gw 169.254.255.2 dev usb0
> setprop net.dns1 8.8.8.8
> ping google.com --> is giving results
插件第二个设备
ifconfig shows this device on usb1 @ ip 169.254.255.2/30
在第二台设备上
Add gw, set DNS like above
现在第二个设备可以ping google.com,但第一个设备不能ping。
当我更改内部IP或分配给主机usb0的IP时,usb1接口我无法通过adb连接到设备。
我怀疑这是一个网络问题,而不是亚行的问题?有任何想法吗?
答案 0 :(得分:4)
经过大量的谷歌搜索和反复试验后,我终于找到了适合我特定设置的解决方案。
我最终做了什么,以及我在第一次尝试时错过的是将每个连接的USB设备放入一个单独的子网中(参见this answer on serverfault)。
为清楚起见,设置如下:
iptables包含以下规则
iptables -t nat -A POSTROUTING -j MASQUERADE
主机的usb0和usb1接口,现在位于不同的子网
usb0: inet addr:169.254.0.1 Bcast:169.254.15.255 Mask:255.255.240.0
usb1: inet addr:169.254.16.1 Bcast:169.254.31.255 Mask:255.255.240.0
Android设备的内部usb0 iface连接在主机的usb0上:
- usb0 169.254.0.2/20
- default gw 169.254.0.1 (so the host's usb0 iface)
在主机的usb1上连接Android设备的内部usb0 iface:
- usb0 169.254.16.2/20
- default gw 169.254.16.1 (so the host's usb1 iface)
这样我现在可以从连接到主机上的usb接口的每个android设备上访问Internet(在adb shell setprop net.dns1 8.8.8.8之后)。
答案 1 :(得分:3)
你需要一个具有root访问权限的linux系统,root用户安卓手机和USB线缆。
<强>步骤强>
在linux系统中安装adb和fastboot。
sudo apt-get install android-tools-adb android-tools-fastboot
找出在您的PC上创建的新网络接口。
ifconfig
通常,新的网络接口将是usb0或usb1。让我们考虑 usb0 。
现在为这个新接口usb0创建一些静态IP地址。
sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0
现在将这个新接口usb0作为共享连接。
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
现在对iptables防火墙进行一些更改。
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
现在我们必须在Android手机中输入一些命令。我们可以使用adb或通过手机中安装的终端模拟器直接在android手机中键入命令。我正在使用adb方式。
在Android手机中找到网络接口。
adb shell busybox ifconfig
我的 rndis0 。
设置静态IP,网络掩码和网关。
adb shell ifconfig rndis0 10.42.0.2 netmask 255.255.255.0
adb shell route add default gw 10.42.0.1 dev rndis0
验证手机上的互联网连接。
adb shell ping 8.8.8.8
如果正在ping,那么移动设备中的互联网正在运行。
此互联网连接不适用于Opera mini和paytm等应用,但适用于whatsapp。