Tenho acesso apenas a sistemas *nix. NetBSD e/ou sistema operacional baseado em Linux.
Então minha dúvida vem do fato de ADB
não estar amplamente disponível em todas as plataformas, caso contrário é muito difícil de instalar ou obter (ter acesso à internet, obter acesso de superusuário, etc).
De qualquer forma, RNDIS
a funcionalidade já é oferecida por quase todos os dispositivos Android. Permitir que o telefone se torne um "roteador" me dará a opção de usar o netcat porque posso simplesmente configurar um "servidor" e obter/receber arquivos bidirecionalmente, sem a necessidade de me envolver ADB
.
Assim:
NetBSD
dhcpcd -n urndis0
Linux
udhcpd -i usb0
Isso me dará um IP dentro de uma sub-rede configurada pelo Android. Algo como:192.168.32.225/24
Então, essencialmente, o telefone atua como um roteador, dando ao meu computador *nix um IP pertencente a uma sub-rede configurada pelo próprio telefone. Gostaria apenas de abrir uma porta no meu host local 127.0.0.1
e netcat
apenas transferir arquivos.
Algo assim:
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
E poder acessar o dispositivo de rede/loop "superior" já existente na própria rede local do Android.
Vamos supor que o telefone Android seja outro host compartilhando sua conexão e atribuindo um IP de sub-rede ao meu computador para que minha caixa *nix possa acessar a Internet:
Minha pergunta é então: Posso usar o IP (que está dentro de uma sub-rede) fornecido pela interface RNDIS do telefone Android para acessar a rede local do próprio telefone apenas com ferramentas padrão em *nix?
Solução @Frédéric Loyer Muito obrigado!
Maravilhoso, com esse método não há necessidade de entrar adb
em cada computador em que estou, na maioria das vezes o que consigo é busybox nc
and or ssh
. Isso é perfeito, com isso eu consigo até fazer ssh no meu Android sem precisar nem de uma conexão ativa no próprio celular, não é incrível!?
Aqui está o que eu fiz.
# 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.
Depois disso, é só fazer o ssh no meu telefone ou abrir portas com o Termux. Incrível! :)
Responder1
No telefone Android, você digitou:
busybox nc -v -w3 -l -p 3838
Isso parece bom.
No Linux, digite ip route
. Você deveria ter algo assim:
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
A linha com a default
rota indica o endereço do roteador. (Aqui 37.59.40.254
). Você deve tentar digitar nc
no Linux com este endereço de roteador, pois é o endereço do Android na sub-rede RNDIS. Você deve digitar apenas um endereço IP: não 127.0.0.24. (127 endereços são reservados para trocas internas em seu sistema Linux).
Não existe fatiamento aqui: o Android cria uma rede que talvez 192.168.32.0/24
. Nesta rede existem dois endereços definidos (um para ambas as extremidades), outros endereços podem não funcionar.