Anclaje inverso de varios dispositivos Android a través de USB

Estoy intentando fijar un ambiente de prueba para mi androide app donde los dispositivos separados necesitan una conexión a Internet, pero no tienen capacidades sin hilos.

Así que decidí usar la conexión inversa usb. Mi máquina host está ejecutando Ubuntu. Ya he logrado configurar el anclaje inverso para un dispositivo, la conexión funciona y puedo hacer ping a google.com desde el shell de adb de este dispositivo.

Cuando conecto un segundo dispositivo, el primer tethering deja de funcionar. Ambos dispositivos tienen la misma dirección IP configurada en su interfaz interna usb0.

Esto es lo que tengo hasta ahora:

  1. El reenvío de puertos en el host está activado

    echo 1 > /proc/sys/net/ipv4/ip_forward 
  2. Regla de Iptables en el host para enrutar tráfico:

     iptables -t nat -A POSTROUTING -s 169.254.255.2/24 -j MASQUERADE 
  3. Plugin primer dispositivo:

     ifconfig shows the device on usb0 @ ip 169.254.255.2/30 
  4. En el primer dispositivo (con shell de adb)

     > route add default gw 169.254.255.2 dev usb0 > setprop net.dns1 8.8.8.8 > ping google.com --> is giving results 
  5. Plugin del segundo dispositivo

     ifconfig shows this device on usb1 @ ip 169.254.255.2/30 
  6. En el segundo dispositivo

     Add gw, set DNS like above 

Ahora el segundo dispositivo puede hacer ping a google.com, pero el primero no.

Cuando cambio la IP interna o los IPs asignados a los anfitriones usb0, interfaces del usb1 no puedo conectar con los dispositivos vía adb más.

Sospecho que esto es un problema de red, en lugar de un problema con ADB? ¿Algunas ideas?

Después de un montón de google y ensayo y error finalmente encontré la solución para mi configuración particular.

Lo que hice al final, y lo que extrañé en mis primeros intentos, fue poner cada dispositivo USB conectado en una subred separada (vea esta respuesta en serverfault ).

Para decirlo claramente, la configuración es ahora como sigue:

  1. Iptables contiene la siguiente regla

     iptables -t nat -A POSTROUTING -j MASQUERADE 
  2. La interfaz del usb0 y del usb1 del anfitrión, ahora en subnets separados

     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. Usb0 interno iface del dispositivo androide conectado en usb0 del anfitrión:

     - usb0 169.254.0.2/20 - default gw 169.254.0.1 (so the host's usb0 iface) 
  4. Interna usb0 iface del dispositivo Android conectado en host usb1:

     - usb0 169.254.16.2/20 - default gw 169.254.16.1 (so the host's usb1 iface) 

De esa manera ahora tengo acceso a Internet (después de shell de adb setprop net.dns1 8.8.8.8) de cada dispositivo android conectado a las interfaces usb en mi host.

Usted necesita un sistema linux con acceso root, enraizado teléfono androide y cable usb.

Pasos

  1. Instale adb y fastboot en su sistema linux.

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

  2. Conecta tu teléfono Android a tu PC a través de USB y habilita el tethering USB desde la configuración de tu teléfono.
  3. Abra el terminal en su PC y escriba los comandos que se indican a continuación.
  4. Descubre la nueva interfaz de red que se creó en tu PC.

    ifconfig

    Generalmente la nueva interfaz de red será usb0 o usb1. Consideremos usb0 .

  5. Ahora haga una dirección IP estática para esta nueva interfaz usb0.

    sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0

  6. Ahora haga esta nueva interfaz usb0 como conexión compartida.

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

  7. Ahora haga algunos cambios en el firewall de iptables.

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

  8. Ahora tenemos que introducir algunos comandos en el teléfono Android. Podemos usar cualquiera de adb o directamente escribiendo los comandos en el teléfono android a través de un emulador de terminal instalado en el teléfono. Estoy utilizando la forma adb.

  9. Encuentra la interfaz de red en el teléfono Android.

    adb shell busybox ifconfig

    La mía fue rndis0 .

  10. Establezca la IP estática, la máscara de red y la puerta de enlace.

    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. Verifique la conectividad de Internet en su teléfono.

    adb shell ping 8.8.8.8

    Si está haciendo ping, entonces el Internet en su móvil está trabajando.

Esta conexión a Internet no funciona con las aplicaciones como opera mini y paytm, pero funciona bien con whatsapp.

  • Windows no reconocerá el Galaxy S2 en absoluto
  • Tarjeta SD no disponible mientras está en modo de depuración USB en DroidX
  • Lectura de Android El accesorio USB lanza ENODEV IOException
  • Controlador Prestigio Multipad PMP3370B USB
  • No se pueden obtener los elementos en la herramienta uiautomator cuando la aplicación se ejecuta en el dispositivo
  • No se puede recibir la intención de difusión de UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED
  • Permiso ATTR {idVendor} para dispositivos USB en linux menta para utilizar tabla mobii protab2 XXL
  • Android Studio no reconocerá Nexus 7 como dispositivo
  • Mi Macbook Pro no detectará mi samsung galaxy s6
  • Habilitar depuración USB en Android
  • Android depura una aplicación de accesorios USB
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.