Ich habe nur Zugriff auf *nix-Systeme. Entweder NetBSD und/oder ein einfaches Linux-basiertes Betriebssystem.
Meine Frage ergibt sich aus der Tatsache, dass ADB
es nicht auf allen Plattformen allgemein verfügbar ist. Wenn doch, ist es sehr schwer, es zu installieren oder zu erhalten (Internetzugang benötigen, Superuser-Zugriff bekommen usw.).
Die Funktionalität wird jedoch RNDIS
bereits von fast allen Android-Geräten angeboten. Wenn ich das Telefon zu einem „Router“ mache, habe ich die Möglichkeit, Netcat zu verwenden, da ich einfach einen „Server“ einrichten und bidirektional Dateien abrufen/empfangen kann, ohne mich selbst darum kümmern zu müssen ADB
.
So was:
NetBSD
dhcpcd -n urndis0
Linux
udhcpd -i usb0
Dadurch erhalte ich eine IP innerhalb eines von Android eingerichteten Subnetzes. So etwas wie:192.168.32.225/24
Im Wesentlichen fungiert das Telefon also als Router und gibt meinem *nix-Computer eine IP, die zu einem vom Telefon selbst eingerichteten Subnetz gehört. Ich möchte einfach einen Port auf meinem lokalen Host öffnen 127.0.0.1
und netcat
Dateien übertragen.
Etwas wie das:
On Android device:
busybox nc -v -w3 -l -p 3838
On *nix system (Linux in the example below):
nc -v -w3 **(upper higher loopdevice outside subnetted network) 127.0.0.24** 3838
Und Sie können auf das „höhere“ Netzwerk/Loop-Gerät zugreifen, das bereits im lokalen Netzwerk von Android vorhanden ist.
Nehmen wir an, das Android-Telefon ist ein anderer Host, der seine Verbindung teilt und meinem Computer eine Subnetz-IP zuweist, damit meine *nix-Box auf das Internet zugreifen kann:
Meine Frage ist dann: Kann ich die von der RNDIS-Schnittstelle des Android-Telefons bereitgestellte IP (die sich innerhalb eines Subnetzes befindet) verwenden, um mit nur Standardtools in *nix auf das lokale Netzwerk des Telefons selbst zuzugreifen?
Lösung @Frédéric Loyer Vielen Dank!
Wunderbar, mit dieser Methode muss ich mich nicht adb
bei jedem Computer anmelden, an dem ich arbeite. Meistens bekomme ich nur busybox nc
und oder ssh
. Das ist perfekt, damit kann ich sogar per SSH auf mein Android zugreifen, ohne dass ich eine aktive Verbindung auf dem Telefon selbst benötige, ist das nicht toll!?
Folgendes habe ich getan.
# This makes my computer to request an IP to my phone.
$sudo udhcpc -i usb0
# Since I got access to busybox-only most of the time, this gives me the IP from the "router" which is the phone.
$route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.42.129 0.0.0.0 UG 0 0 0 usb0
127.0.0.1 * 255.255.255.255 UH 0 0 0 lo
192.168.42.0 * 255.255.255.0 U 0 0 0 usb0
# ifconfig output shows me the new IP assigned to usb0 on my computer.
Danach muss ich mich nur noch per SSH mit meinem Telefon verbinden oder die Ports mit Termux öffnen. Großartig! :)
Antwort1
Auf dem Android-Telefon haben Sie Folgendes eingegeben:
busybox nc -v -w3 -l -p 3838
Das scheint in Ordnung zu sein.
Unter Linux geben Sie ein ip route
. Das Ergebnis sollte etwa so aussehen:
default via 37.59.40.254 dev enp1s0 onlink
37.59.40.0/24 dev enp1s0 proto kernel scope link src 37.59.40.118
Die Zeile mit der default
Route gibt die Routeradresse an. (Hier 37.59.40.254
). Sie sollten versuchen, von Linux aus diese Routeradresse einzugeben, nc
da es sich um die Android-Adresse im RNDIS-Subnetz handelt. Sie sollten nur eine IP-Adresse eingeben: Nr. 127.0.0.24. (127-Adressen sind für den internen Austausch innerhalb Ihres Linux-Systems reserviert).
So etwas wie Slicing gibt es hier nicht: Android erstellt ein Netzwerk, das möglicherweise 192.168.32.0/24
… In diesem Netzwerk sind zwei Adressen definiert (eine für beide Enden), andere Adressen funktionieren möglicherweise nicht.