Android-emulator für den Zugriff redir port von einem anderen host
Haben einen server-socket läuft in einem android-Anwendung, die ich Debuggen mit dem emulator. Mithilfe der Emulatoren-Konsole und "redir add tcp:8888:8888" ich kann den Dienst zur Verfügung stellen, um ein Programm auf meiner Entwicklungs-Maschine (localhost:8888).
Den redir port ist jedoch nicht auf eine andere Netzwerk-Schnittstelle, das heißt, ich kann nicht auf Sie durch die host-ip entweder auf dem lokalen Entwicklungscomputer, oder von einem sekundären Computer im Netzwerk. Wer weiß, ob das möglich zu machen, den emulator Bindung an alle Netzwerkschnittstellen ein, oder anderen trick, um andere hosts auf dem Netzwerk zu verbinden, um den emulator?
Dank
InformationsquelleAutor Thingfish | 2010-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Technisch ist der emulator Grenzen socket auf dem lokalen loopback. Sie können es sehen, von dem netstat-Befehl
"Lokale Adresse" werden sollte *.8888, um für Ihren Dienst von außen erreichbar.
Die einzige Lösung, die Sie haben ist, um einen port aus der physikalischen Schnittstelle der Teilnehmeranschlussleitung.
Auf linux, das ist das system, das ich verstehen, die Sie verwenden, ist der einfachste Weg, es zu tun ist mit Hilfe von iptables mit jedem Quell-interface als input-und 127.0.0.1 als Ziel-Adresse.
Benötigen Sie administrator-Rechte haben, aber es kann getan werden, auf einer basis pro Sitzung.
InformationsquelleAutor Dario
Fand ich die OP ' s Kommentar/Vorschlag mit rinetd viel einfacher als iptables.
rinetd kann abfangen von verbindungen an einer Schnittstelle und leitet Sie an eine andere IP; so, um dieses problem zu lösen der emulator nicht zugänglich zu anderen Computern als dem host-Rechner, Sie abzufangen, die eingehenden verbindungen zu Ihrem host und leiten Sie an 127.0.0.1
Hier ist, wie:
Installieren Sie zuerst rinetd (http://www.boutell.com/rinetd/)
sudo apt-get install rinetd
". Der Befehl könnte auch anders sein, in anderen Linux-Distributionen...Als Nächstes richten Sie eine port-Umleitung im emulator:
telnet localhost 5554
" (oder wie auch immer der Anschluss für den avd ist)redir add <protocol>:<host port>:<emu port>
" (z.B., "redir add tcp:5000:7000
" zum weiterleiten von tcp-Daten, die an port 5000 auf dem host auf port 7000 im emulator)Konfigurieren rinetd:
/etc/rinetd.conf
und fügen Sie die Zeile "<host ip> <host port> 127.0.0.1 <localhost port>
". Also, wenn Ihr host-computer die IP-Adresse 123.45.67.89 und Sie wollen port 5000 und dann leitet es auf 127.0.0.1:5000, "123.45.67.89 5000 127.0.0.1 5000
"Ich bin mir nicht sicher, ob rinetd wird automatisch gestartet, nachdem Sie es installieren.. um es auszuführen:
/usr/sbin/rinetd
"Neu initialisieren rinetd nach dem ändern der config-Datei:
cat /var/run/rinetd.pid
" zeigt dir die pid von rinetdsudo kill -1 <pid>
" re-initialisiert (e.g, "sudo kill -1 3225
")InformationsquelleAutor michaelmoo
Können Sie auch verwenden, netcat für port-forwarding.
Starten Sie den emulator, dann führen Sie die folgenden mit einem terminal:
Setup-port-Weiterleitung:
Wenn die
-c
- switch nicht verfügbar ist, können Sie den folgenden statt:Als ein Beispiel, wenn Sie möchten, dass andere Computer eine Verbindung zu port 1234 von Ihrem android-emulator, müssen Sie die 2 ports auf Ihrem host-computer.
<host port>
: port lauscht auf dem lokalen interface leitet dann Nachrichten an port 1234. Wir verwenden 9200.<external port>
: port lauscht auf einem beliebigen interface leitet dann Nachrichten an die<host port>
. Wir verwenden 9100.Befehle:
InformationsquelleAutor yoneal