5

我正在尝试为我的 android 应用程序设置一个测试环境,其中单独的设备需要 Internet 连接,但没有无线功能。

所以我决定使用 USB 反向网络共享。我的主机正在运行 Ubuntu。我已经设法为一台设备设置反向网络共享,连接正常,我可以从该设备的 adb shell ping google.com。

当我连接第二个设备时,第一个网络共享停止工作。两台设备在其内部 usb0 接口上配置了相同的 IP 地址。

这是我到目前为止所拥有的:

  1. 主机上的端口转发已激活

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. 主机上的 iptables 规则以路由流量:

    iptables -t nat -A POSTROUTING -s 169.254.255.2/24 -j MASQUERADE
    
  3. 插件第一设备:

    ifconfig shows the device on usb0 @ ip 169.254.255.2/30
    
  4. 在第一台设备上(使用 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
    
  5. 插入第二个设备

    ifconfig shows this device on usb1 @ ip 169.254.255.2/30 
    
  6. 在第二台设备上

    Add gw, set DNS like above
    

现在第二个设备可以ping google.com,但第一个不能。

当我更改内部 IP 或分配给主机 usb0、usb1 接口的 IP 时,我无法再通过 adb 连接到设备。

我怀疑这是网络问题,而不是 ADB 的问题?有任何想法吗?

4

2 回答 2

4

经过大量的谷歌搜索和反复试验,我终于找到了适合我特定设置的解决方案。

我最终所做的以及我在第一次尝试中错过的是将每个连接的 USB 设备放入一个单独的子网中(请参阅serverfault 上的这个答案)。

说清楚点,现在的设置如下:

  1. iptables 包含以下规则

    iptables -t nat -A POSTROUTING -j MASQUERADE
    
  2. 主机的 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
    
  3. Android 设备的内部 usb0 iface 连接到主机的 usb0:

    - usb0 169.254.0.2/20
    - default gw 169.254.0.1 (so the host's usb0 iface)
    
  4. Android 设备的内部 usb0 iface 连接到主机的 usb1:

    - 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 之后)。

于 2015-03-05T15:09:08.287 回答
3

您需要一个具有 root 访问权限的 linux 系统、root 的 android 手机和 USB 数据线。

脚步

  1. 在你的 linux 系统中安装 adb 和 fastboot。

    sudo apt-get install android-tools-adb android-tools-fastboot

  2. 通过 USB 将您的 android 手机连接到您的 PC,并从手机上的设置中启用 USB 网络共享。
  3. 在您的 PC 中打开终端并键入下面给出的命令。
  4. 找出在您的 PC 上创建的新网络接口。

    ifconfig

    通常新的网络接口是usb0 或usb1。让我们考虑usb0

  5. 现在为这个新接口 usb0 创建一些静态 IP 地址。

    sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0

  6. 现在将这个新接口 usb0 作为共享连接。

    echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

  7. 现在对 iptables 防火墙进行一些更改。

    sudo iptables -t nat -F sudo iptables -t nat -A POSTROUTING -j MASQUERADE

  8. 现在我们必须在安卓手机中输入一些命令。我们可以使用 adb 或通过安装在手机中的终端模拟器直接在安卓手机中输入命令。我正在使用 adb 方式。

  9. 在安卓手机中找到网络接口。

    adb shell busybox ifconfig

    我的是rndis0

  10. 设置静态 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

  11. 验证手机上的 Internet 连接。

    adb shell ping 8.8.8.8

    如果它正在 ping,那么您的手机中的 Internet 正在工作。

此互联网连接不适用于opera mini 和paytm 等应用程序,但适用于whatsapp。

于 2016-03-08T16:44:59.503 回答