J'ai épuisé les méthodes documentées de activation programmée de la connexion USB :
-
El
service
La méthode ne fonctionne pas sur mon téléphone (Samsung Note 4). Il semble qu'il s'agisse d'une sorte d'API protégée, et le fait de l'invoquer à partir deadb
n'a aucun effet. -
El
shell input
n'est pas applicable, car elle exige que l'appareil soit déverrouillé, et il ne semble pas y avoir de moyen de déverrouiller de façon programmatique et non destructive un appareil verrouillé par une empreinte digitale.
Je cherche donc à atteindre cet objectif "à la dure", c'est-à-dire à faire tout ce que l'espace utilisateur Android fait lorsque vous appuyez sur la case à cocher du câble USB.
Pour autant que je sache, cela implique les étapes suivantes (dont la plupart sont similaires à la façon dont vous le feriez sur une machine Linux) :
-
Établissez une connexion IP avec l'ordinateur hôte via USB. Cela implique de mettre l'USB en
rndis
la configuration des routes, l'attribution d'une adresse IP, etc.J'ai déjà trouvé comment y parvenir et posté la réponse. aquí .
-
Lancer un
dnsmasq
par exemple, pour attribuer une IP au PC connecté via DHCP, et transmettre les requêtes DNS.Cette étape ne devrait pas être nécessaire si vous n'avez pas besoin de la détection du serveur DNS et que vous attribuez vous-même des IP statiques sur les interfaces USB.
-
Activer le transfert d'IP (
/proc/sys/net/ipv4/ip_forward
). -
Mettre en place
iptables
pour activer la redirection/masquerade. -
Mettre à jour les tables de routage pour la comptabilité du trafic.
J'ai réussi à écrire une série de scripts qui reproduisent exactement les effets visibles (décrits ci-dessus) tels qu'ils sont exécutés par le système d'exploitation Android lors de l'activation de la connexion USB via son interface utilisateur. Pour créer les scripts, j'ai enregistré l'état du système ( iptables -S
, ip route show table all
) avec et sans tethering, puis a converti les différences en commandes shell pour appliquer les changements au système. Cependant, mes répliques ne sont toujours pas suffisantes ; une partie du système reste non configurée, ce qui empêche le trafic de passer.
Quelqu'un a-t-il une idée de ce qui pourrait m'échapper, ou de la manière dont je peux résoudre le problème ?