У меня есть доступ только к *nix системам. Либо NetBSD и/или голая ОС на базе Linux.
Поэтому мой вопрос возникает из-за того, что ADB
он не доступен на всех платформах, а если и доступен, то его очень сложно установить или получить (иметь доступ к Интернету, получить права суперпользователя и т. д.).
В любом случае, RNDIS
функциональность уже предлагается почти всеми устройствами Android. Позволяя телефону стать «маршрутизатором», я получу возможность использовать netcat, поскольку я могу просто настроить «сервер» и получать/получать файлы в двух направлениях, без необходимости вмешиваться ADB
.
Так:
NetBSD
dhcpcd -n urndis0
Linux
udhcpd -i usb0
Это даст мне IP в подсети, настроенной Android. Что-то вроде:192.168.32.225/24
Итак, по сути, телефон действует как маршрутизатор, давая моему компьютеру *nix IP, принадлежащий подсети, настроенной самим телефоном. Я хотел бы просто открыть порт на моем локальном хосте 127.0.0.1
и netcat
просто передавать файлы.
Что-то вроде этого:
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
И иметь возможность доступа к «более высокому» сетевому/петлевому устройству, уже существующему в локальной сети Android.
Предположим, что телефон Android — это еще один хост, который использует свое подключение и назначает IP-адрес подсети моему компьютеру, чтобы мой компьютер *nix мог получить доступ к Интернету:
Тогда мой вопрос: могу ли я использовать IP-адрес (находящийся в подсети), предоставленный интерфейсом RNDIS телефона Android, для доступа к локальной сети самого телефона с помощью стандартных инструментов *nix?
Решение @Frédéric Loyer Большое спасибо!
Замечательно, с этим методом мне не нужно заходить adb
на каждый компьютер, за которым я работаю, в большинстве случаев у меня есть busybox nc
и или ssh
. Это идеально, с этим я могу даже подключиться по ssh к своему Android, даже не нуждаясь в активном подключении на самом телефоне, разве не удивительно!?
Вот что я сделал.
# 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.
После этого остается только подключиться по ssh к моему телефону или открыть порты с помощью Termux. Удивительно! :)
решение1
На телефоне Android вы ввели:
busybox nc -v -w3 -l -p 3838
Кажется, все в порядке.
В Linux введите ip route
. У вас должно получиться что-то вроде этого:
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
Строка с default
маршрутом указывает адрес маршрутизатора. (Здесь 37.59.40.254
). Вам следует попробовать ввести nc
из Linux этот адрес маршрутизатора, поскольку это адрес Android в подсети RNDIS. Вам следует ввести только один IP-адрес: не 127.0.0.24. (127 адресов зарезервированы для внутреннего обмена в вашей системе Linux).
Здесь нет такого понятия, как нарезка: Android создает сеть, которая может быть 192.168.32.0/24
. В этой сети определены два адреса (по одному для обоих концов), другие адреса могут не работать.