我只能访问 *nix 系统。NetBSD 和/或基于 Linux 的裸操作系统。
所以我的问题来自这样一个事实,即ADB
在所有平台上都没有广泛使用,如果是这样很难安装或获取(可以访问互联网,获得超级用户访问权限等)。
无论如何,RNDIS
几乎所有 Android 设备都已经提供了功能。允许手机成为“路由器”将使我可以选择使用 netcat,因为我可以设置“服务器”并双向获取/接收文件,而无需ADB
参与。
像这样:
NetBSD
dhcpcd -n urndis0
Linux
udhcpd -i usb0
这将为我提供一个由 Android 设置的子网内的 IP。就像是: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 盒子可以访问互联网:
那么我的问题是:我可以使用Android手机的RNDIS接口提供的IP(在子网内)通过*nix中的标准工具访问手机本身的本地网络吗?
解决方案 @Frédéric Loyer 非常感谢!
太好了,使用这种方法,我不需要在adb
我正在使用的每台计算机上运行,大多数时候我得到的是busybox nc
and or 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 打开端口即可。惊人!:)
在 Android 手机上,您输入了:
这似乎没问题。
在 Linux 上,键入
ip route
. 你应该有这样的东西:带有
default
路由的行表示路由器地址。(这里37.59.40.254
)。您应该尝试nc
使用此路由器地址从 Linux 输入,因为它是 RNDIS 子网上的 Android 地址。您应该只输入一个 IP 地址:没有 127.0.0.24。(127 个地址被保留用于您的 Linux 系统内的内部交换)。这里没有切片之类的东西:Android 创建了一个可能的网络
192.168.32.0/24
。在这个网络上定义了两个地址(一个用于两端),其他地址可能不起作用。