7 votos

Conectar el emulador de Android a una red local

Intento conectar mi emulador de Android (desde el SDK) a la red local a través de un puente de red y una interfaz de tap, con la opción -qemu. Necesito que use direcciones multicast en el código de la biblioteca nativa para comunicarme con dispositivos IoT conectados a la red local.

Pero dependiendo de la versión de la imagen y la arquitectura (x86 o ARM) tengo diferentes comportamientos.

Para la imagen ARM (Android 7.1.1 armeabi-v7a) el puente funciona perfectamente. El cliente DHCP funciona automáticamente después del inicio. Puedo hacer ping al gateway de la LAN, a Google... y el multicast funciona. Pero la tarjeta de red añadida al emulador no está presente a través de ip link o ifconfig, está oculta, ¡y la ruta predeterminada no está presente! ¡Cosa extraña! El emulador no es pingable desde el exterior.

Para la imagen X86 (Android 7.1.1 google_apis/x86), el puente funciona perfectamente. El cliente DHCP funciona y la tarjeta de red del invitado está configurada. Puedo hacer ping al gateway de la LAN, a Google..., el multicast funciona y la tarjeta de red es visible (eth1). Pero para hacer ping al gateway u otro host, debo usar ping -I para especificar la interfaz de la tarjeta de red, el emulador utiliza la red de slirp y no es pingable desde el exterior.

¿Es posible hacer que el emulador sea pingable desde el exterior?

¿Es posible utilizar el ping en el emulador x86 sin utilizar la opción -I para ping?

¿Es posible ver la interfaz de red conectada en el emulador ARM?

Gracias por tu ayuda.

1voto

tarek Puntos 11

Creo que si agregas la IP del servidor en tu red LAN eso te permitirá acceder a él desde el emulador. Por lo tanto, en tu caso se requiere una pelea con iptables

enlaces útiles https://developer.android.com/studio/run/emulator-networking.html

y hay mucha documentación sobre cómo redirigir el tráfico de red a una nueva dirección IP usando iptables

¡Buena suerte, espero que mi respuesta te haya sido útil!

0 votos

Gracias, ya conozco el enlace. El emulador utiliza la red slirp qemu. Pero tal vez haya algunas otras cosas que bloqueen el tráfico de red hacia la ruta predeterminada. Quizás algún servicio de Android, reglas iptable o un módulo kernel. En mi sistema, las reglas de red están completamente abiertas en ambas direcciones.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X