Verbinden Sie den Android-Emulator mit dem LAN

Ich versuche, meinen Android-Emulator (von SDK) über eine Netzwerkbrücke und eine Tap-Schnittstelle und mit der Option -qemu mit dem LAN zu verbinden. Ich brauche es, um Multicast-Adressen im nativen Bibliothekscode für die Kommunikation mit IoT-Geräten zu verwenden, die mit dem LAN verbunden sind.

Aber je nach Image-Version und Architektur (x86 oder ARM) habe ich unterschiedliche Verhaltensweisen.

Für das ARM-Image (Android 7.1.1 armeabi-v7a) funktioniert die Bridge perfekt. Der DHCP-Client funktioniert nach dem Booten automatisch. Ich kann das Lan-Gateway anpingen, googlen ... und das Multicasting funktioniert. Aber das NIC-Add zum Emulator ist nicht über IP-Link oder ifconfig vorhanden, es ist versteckt und die Standardroute ist nicht vorhanden !! komische Sache. Der Emulator ist von außen nicht pingbar.

Für X86-Images (Android 7.1.1 google_apis/x86) funktioniert die Bridge einwandfrei. DHCP-Client funktioniert und die Gast-NIC ist konfiguriert. ich kann das lan-gateway anpingen, googlen..., das multicasting funktioniert, und die nic ist sichtbar (eth1). Aber um das Gateway oder einen anderen Host zu pingen, muss ich ping -I verwenden, um die nic-Schnittstelle anzugeben, der Emulator verwendet das slirp-Netzwerk und es ist nicht von außen pingbar.

Ist es möglich, den Emulator von außen pingbar zu machen?

Es ist möglich, Ping im x86-Emulator zu verwenden, ohne die Option -I für Ping zu verwenden?

Ist es möglich, den Netzwerk-NIC-Anhang im ARM-Emulator zu sehen?

Danke für deine Hilfe.

Antworten (1)

Ich denke, wenn Sie die IP des Servers in Ihrem LAN-Netzwerk hinzufügen, können Sie vom Emulator darauf zugreifen. In Ihrem Fall ist also ein Kampf mit iptables erforderlich

Nützliche Links https://developer.android.com/studio/run/emulator-networking.html

und es gibt eine Menge Dokumentation darüber, wie man den Netzwerkverkehr mit iptables auf eine neue IP-Adresse umleitet

Viel Glück, ich hoffe, meine Antwort war hilfreich!

Danke, ich kenne den Link, der Emulator verwendet das slirp qemu-Netzwerk. Aber vielleicht gibt es noch andere Dinge, die den Netzwerkverkehr auf der Standardroute blockieren. Vielleicht ein Android-Dienst, iptable-Regeln oder ein Kernel-Modul. Auf meinem Host sind die Netzwerkregeln in beide Richtungen vollständig geöffnet.