2 votes

Restreindre une application à envoyer du trafic internet mais pas à en recevoir en retour ?

Existe-t-il un moyen ou une application permettant de restreindre certaines applications sur mon Android, ou l'ensemble de l'appareil, pour qu'elles n'envoient que des paquets de données Internet mais ne les reçoivent pas en retour ?

Je veux confondre une application de jeu en faisant ça. Il me limite à deux jeux simultanément. Mais je veux supprimer ce comportement en ouvrant le jeu de manière normale, en bloquant le trafic entrant, puis en envoyant trois demandes ou plus pour lancer un jeu. L'application se bloque, mais après le redémarrage, les trois jeux ou plus démarrent.

J'ai un téléphone enraciné.

4voto

Irfan Latif Points 16863

C'est possible, mais loin d'être facile à réaliser. Il existe de multiples approches que nous pouvons utiliser pour bloquer (ou du moins essayer de bloquer) le trafic entrant.

Mais bloquer la circulation dans un sens n'a pas de sens dans la plupart des cas. Une application qui envoie des paquets TCP mais ne reçoit pas de réponse en retour se considérera déconnectée d'Internet. Cependant, vous pouvez essayer pour votre cas particulier si cela fonctionne.

Note : Toutes les méthodes décrites ci-dessous nécessitent un accès Root.

BLOCAGE BASÉ SUR L'UID :

Android utilise le noyau Linux qui possède un pare-feu intégré. netfilter qui peuvent être utilisés pour filtrer le trafic réseau. Il existe un iptables module nommé owner qui filtre le trafic en fonction de son UID / GID. Chaque application sur Android est un utilisateur UNIX et possède un UID unique.

Mais le problème est que owner Le module est uniquement valable pour le trafic sortant c'est-à-dire les paquets générés localement. Les paquets IP provenant d'une autre machine ne portent pas d'information sur le propriétaire. Le module propriétaire est donc appliqué au trafic entrant devrait échouer ou il devrait donner un avertissement comme expliqué aquí . Pour mesurer l'utilisation du réseau entrant/sortant par application, Android a patché le noyau pour y inclure qtaguid module. Mais iptables n'a pas été patché pour utiliser le module en ligne de commande. Voir également les détails connexes dans Comment visualiser le trafic réseau demandé par une application ? .

Cependant owner fonctionne pour certains des paquets TCP entrants reçus en retour avec Drapeaux TCP qui peut bloquer totalement ou partiellement le trafic entrant :

# iptables -I INPUT -m owner --uid-owner <APP_UID> -j DROP

* Pour supprimer la règle, remplacez -I avec -D

La raison en est probablement que les mêmes paquets TCP sont renvoyés pour Handshake et Bye, mais je n'en suis pas sûr. Cependant, assurez-vous que cela ne fonctionne pas pour un trafic 100% TCP/UDP. Voir le trafic échappé :

# iptables -I INPUT -j LOG --log-uid --log-prefix 'INCOMING '
# dmesg -w |  grep INCOMING | grep -vE 'IN=lo|=5353|=1900|ICMP' | grep -v UID=

Certaines applications de pare-feu bloquent le trafic sortant utilisant un VPN sur Android. API de VpnService fait également appel à UIDs y SOcket_MARKs pour contrôler le trafic dans la table de routage / RPDB, juste avant de quitter le dispositif.

BLOCAGE BASÉ SUR LE PORT :

Des moyens plus sûrs et plus complexes de bloquer le trafic entrant reposent sur l'observation de tous les sockets réseau créés et supprimés. Un socket est une combinaison d'adresse IP et de port.

Pour avoir une idée de base de cette approche, prenons l'exemple de l'application Firefox sur mon téléphone, avec l'UID 10081 :

# ss -4tuapne | awk '/uid:10081/ { print $5,$1,$2,$7.$8 }'
192.168.1.11:39910 tcp ESTAB users:(("mozilla.firefox",pid=22370,fd=163)) uid:10081
...
...
# iptables -I INPUT -p tcp --dport 39910 -j DROP

Cela bloquera tout le trafic entrant vers le port 39910 utilisé par l'application Firefox. Mais cette approche n'est pas pratique car la création et la suppression des sockets se fait à un rythme tellement élevé que même dans le code natif, certains paquets seraient manqués. Et au moment suivant, le même port sera assigné au socket d'une autre application. Cela ne semble possible que si le port local est Correction de mais pour les applications normales, le système aléatoire sélectionné est disponible ( TCP / [UDP](https://developer.android.com/reference/java/net/DatagramSocket.html#DatagramSocket()) ) est utilisé pour la création de sockets (peut être contrôlé avec la commande gamme de ports ip_locaux ).

Vous pouvez trouver plus de détails Visualiser le trafic réseau demandé par l'application .

BLOCAGE BASÉ SUR L'IP :

Cette méthode fonctionne mieux si vous connaissez l'adresse IP source des paquets. Trouvez tous les serveurs auxquels votre application essaie de se connecter sur Internet (par exemple en bloquant l'application pour le trafic sortant) et bloquez-les en utilisant la méthode suivante iptables le filtrage des IP sources, si elles ne sont pas au nombre de cent et si elles ne changent pas fréquemment :

# iptables -I INPUT -p tcp -s <IP_ADDR> -j DROP

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