1 votes

Configuration manuelle de la connexion USB avec Root

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 de adb 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) :

  1. É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í .

  2. 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.

  3. Activer le transfert d'IP ( /proc/sys/net/ipv4/ip_forward ).

  4. Mettre en place iptables pour activer la redirection/masquerade.

  5. 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 ?

0voto

Vladimir Panteleev Points 131

Un ami m'a fait savoir qu'il y a plus d'un sysctl pour le transfert (un global et un par interface, puis plusieurs pour IPv6).

Sur mon téléphone, les paramètres pertinents sont :

vars=(
    net.ipv4.conf.all.accept_redirects=0
    net.ipv4.conf.all.forwarding=1
    net.ipv4.conf.default.forwarding=1
    net.ipv4.conf.ip6tnl0.forwarding=1
    net.ipv4.conf.lo.forwarding=1
    net.ipv4.conf.p2p0.forwarding=1
    net.ipv4.conf.rmnet0.forwarding=1
    net.ipv4.conf.rmnet1.forwarding=1
    net.ipv4.conf.rmnet2.forwarding=1
    net.ipv4.conf.rmnet3.forwarding=1
    net.ipv4.conf.rmnet4.forwarding=1
    net.ipv4.conf.rndis0.forwarding=1
    net.ipv4.conf.sit0.forwarding=1
    net.ipv4.conf.wlan0.forwarding=1
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=2
    net.ipv6.conf.all.proxy_ndp=2
    net.ipv6.conf.default.forwarding=2
    net.ipv6.conf.ip6tnl0.forwarding=2
    net.ipv6.conf.lo.forwarding=2
    net.ipv6.conf.p2p0.forwarding=2
    net.ipv6.conf.rmnet0.forwarding=2
    net.ipv6.conf.rmnet1.forwarding=2
    net.ipv6.conf.rmnet2.forwarding=2
    net.ipv6.conf.rmnet3.forwarding=2
    net.ipv6.conf.rmnet4.forwarding=2
    net.ipv6.conf.rndis0.forwarding=2
    net.ipv6.conf.sit0.forwarding=2
    net.ipv6.conf.wlan0.forwarding=2
) ; sysctl "${vars[@]}"

Avec ceux-ci et les autres, la redirection et le tethering fonctionnent !

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X