Comment afficher le trafic réseau demandé par une application spécifique? -- applications domaine et networking domaine et internet domaine et data-monitoring domaine et processes domain android en relation problème

How to view network traffic requested by a specific app?



3
vote

problème

français

Il y a beaucoup de discussions sur la manière de voir quelle application demande une connexion réseau. J'ai essayé les applications suivantes:

tcapturepacket wifi monitor connection tracker

Cependant, aucun d'entre eux n'a été utile. Par exemple, pendant une courte période, j'ai téléchargé un fichier PCAP de 30kb qui peut être consulté ici < / a>. Je n'ai toujours pas trouvé quelle application demande la connexion et où elle essaie de se connecter.

J'ai aussi essayé de regarder adb logcat , mais n'a pas trouvé d'informations utiles. Peut-être que quelque chose a été manqué ici. Toute hypothèse?

langue Anglaise

There are lots of discussion on how to see which app is requesting network connection. I have tried the following apps:

tcapturepacket wifi monitor connection tracker 

However, none of them was useful. For example, for a short period of time, I uploaded a 30KB pcap file which can be viewed here. Still I haven't find out which app is requesting connection and to where it is trying to connect.

I also tried to look at adb logcat, but didn't find useful information. Maybe something has been missed here. Any guess?

              

Liste de réponses

5
 
vote

Si vous avez un téléphone enraciné, allez pour nethogs (pour la surveillance en direct) ou iptables (pour obtenir des statistiques) Outils de commande. L'utilisation d'applications basées sur VPN ou Android Statistiques est la seule solution non root possible. Ou se référer à Cette réponse pour un 9988777663 / dumpsys Solution basée.

Tout d'abord, le suivi d'un UID ou de PID d'un flux de réseau n'est pas simple, car ceux-ci ne sont pas liés au réseau mais des paramètres associés au système d'exploitation. propositions et Projets abandonnés existent.

Android attribue une UID unique à chaque application installée, tout comme chaque utilisateur humain sur Linux a une uide. Nous pouvons donc capturer des paquets envoyés par un UID spécifique sur les interfaces réseau pour suivre l'utilisation.

TCPDump:

Maintenant comment nous pouvons capturer le trafic réseau? La plupart des renifleurs de réseau utilisent libpcap famille de bibliothèques indépendantes de système à cette fin . Il prend en charge le filtre à paquets BSD (BPF) pour le filtrage de paquets dans le noyau. Des utilitaires populaires utilisant 9988777665 Inclure 9988777666 , nmap , tshark/wireshark , dumpcap , nethogs0 Etc. App utilitaires réseau et d'autres utilisent également nethogs1 .

Cependant, UID Info n'est pas propagé via le nethogs2 / nethogs3 canal que 99887776614 utilise à couche OSI 2 . Donc, ce que nous pouvons faire ici, c'est utiliser les prises de réseau (combinaison de la propriété intellectuelle et du port) étant créée et utilisée par une application. 99887776615 ou 99887776616 affichera toutes les prises réseau avec des connexions actives / établies. Les deux outils sont disponibles sur Android (ou vous pouvez obtenir un binaire statique), 99887776617 est le plus récent. Socket Vs. UID peut également être directement lu depuis nethogs8 . Android app NetStat plus fonctionne sur le même principe . Cela fournira une adresse locale (prise) utilisée par un processus.

Une fois que nous savons quelles sockets sont utilisés par une application (UID), nethogs9 videra tout le trafic provenant de ce processus.
De même, une prise distante (si elle n'est pas connectée à plusieurs applications) peut également être utilisée pour filtrer les résultats.

limitations:

Cependant, il y a des problèmes avec cette approche:

  • Les applications Android lancent généralement plus d'un processus à la fois en parallèle I.e. Plusieurs PID travaillant sous la même uide . Nous devons donc capturer le trafic de tous les processus.
  • Les applications continuent à créer et à supprimer des sockets. Garder une trace de Changer de manière continue des sockets est presque impossible, en particulier lorsqu'il existe un grand nombre d'applications accessibles au réseau simultanément.
  • Il y a - cependant rare - possibilité que les prises locales sont partagées par plusieurs processus sur des os de type UNIX. Les sockets partagés à distance tels que UDP / 53 utilisés pour la résolution DNS ne peuvent pas être suivis pour un seul processus. Cela affaiblit davantage l'approche.

Nethogs traverses iptables0 et des copies avec le Les limitations de l'OVE (bien que pas toujours très réussies):

IPTABLES:

Les lacunes décrites ci-dessus décrites d'un outil de couche 2 peuvent être atténuées en utilisant iptables iptables1 ou iptables2 . La couche 2 est juste au-dessus de la couche physique I.E. C'est la dernière chose que les paquets rencontrent avant de quitter l'appareil. C'est pourquoi, étant à la couche de liaison de données et au niveau inférieur de la pile net, BPF est une sorte de mécanisme de filtrage de paquets apatrides par rapport à iptables3 iptables4 qui fonctionne à OSI COUCHE 3 (PROGRAMMES DE PROGRAMME DE MANESPACE). Donc iptables5 peut également obtenir des informations à partir de TCP / IP Stack ( Couche 4 ). Il filtre des paquets basés sur leurs uids de créateur à l'aide du module iptables6 que Interagit avec des sockets pour trouver la propriété de paquets.

iptables7 écrit sur le journal de noyau qui peut être lu en utilisant iptables8 ou iptables9 . UID d'une application peut être obtenue à l'aide d'une application ou de lecture de logcat0 ou logcat1 .

logcat2

Sortie peut être enregistré dans un fichier et formaté à l'aide d'outils tels que logcat3 , , , logcat5 etc. "href =" https: //play.google.com/store/apps/details?id=com.googlecode.networklog "rel =" Nofollow Noreferrer "> Connexion réseau - Bien que très obsolète - fonctionne de la même manière. AFWALL + est un pare-feu basé sur 99887776636 qui peut enregistrer / notifier une application activité lorsque l'application est bloquée.

Le seul inconvénient avec cette approche est qu'il ne peut pas être utilisé pour renifler du trafic d'un processus lorsqu'il y a plusieurs processus fonctionnant avec la même UID . logcat7 Impossible de capturer des paquets basés sur PIDS. Ils ont décidé Ne pas utiliser logcat8 Avec les processus car le processus est démarré avant qu'il ne soit bloqué / reniflé, et le programme pourrait facilement apparaître un processus enfant avec de nouveaux PID qui ne seraient pas bloqués / reniflés. Les PID sont également créés et détruits aussi rapidement que les prises. Donc, il y a toujours de la place pour que la circulation soit fuite.

QTAGUID:

logcat9 Le module ne fonctionnera pas pour trafic entrant ou transféré car les paquets IP ne portent aucune information de propriété. Pour mesurer l'utilisation des réseaux entrants / sortants perforants, le noyau corrigé Android à inclure dumpsys0 module. Nous pouvons lire des statistiques de dumpsys1 . Avec certains scripts de shell, obtenez une utilisation en direct des données depuis le redémarrage:

Toutefois sur Android 9+, dumpsys2 est en train d'être remplacé avec étendu BPF (qui est également prévu à < un href = "https://cium.io/blog/2018/04/17/whay-is-the-kernel-community-replacing-postables/" rel = "nfollow noreferrer"> Remplacez dumpsys3 cadre dans le noyau Linux). Connexes: Quel processus est responsable de la capture d'utilisation des données?

iptables + tcpdump:

Un alternatif est de mettre le trafic sortant d'une application dans un dumpsys4 Groupe et plus tard TCPDump capture paquets de ce groupe:

  dumpsys5  

Ceci permet de nous rapprocher de la couche physique lorsqu'il renifle le trafic sortant. Mais cela peut toujours donner faux positifs par exemple. Si des paquets sont abandonnés / perdus dans des tables de routage. C'est pourquoi Sniffers Travailler chez OSI Couche 2. Ou même mieux, c'est de regarder de l'extérieur par exemple en utilisant un serveur proxy / VPN ou sur un PC attaché ou au routeur. Mais cela ne capte pas la circulation par UID / PID.

Autres options:

  • Utilisez des outils de diagnostic tels que 99887776646 pour suivre dumpsys7 en rapport avec l'activité réseau d'un processus. forcer_bind et Tracédump travaille également sur le même principe. Sous-système d'audit peut être utilisé pour la même chose.
  • Utilisez Classificateur de réseau Cgroup avec dumpsys8 dumpsys9 pour renifler le trafic de certains processus (ES).
  • Utilisez libpcap0 pour isoler les processus et lire l'utilisation des données par interface. Nstrace travaille sur le même principe.
  • Si l'intention est entièrement de bloquer le trafic originaire de certains processus, libpcap1 et 99887776652 peut être utilisé pour limiter la capacité des processus de création de sockets en définissant un libpcap3 et supprimer libpcap4 respectivement.

La plupart d'entre eux ne sont pas des options simples et viables pour Android et nécessitent des configurations avancées.

API d'Android (options non root):

Certaines applications telles que NETGUARD Utilisez VPNService API d'Android pour bloquer le trafic à la couche 3 (interface TUN). L'application peut "notifier quand une application accède à Internet" . Par application capturant et suivi ( 1 , 2 ) est possible avec API VPN Comme Android utilise libpcap5 99887776656 ( 1 , 2 ) Pour contrôler le trafic dans la stratégie de routage réseau ( RPDB ), juste avant de quitter l'appareil.

Certaines applications telles que Netlive Utilisez NetworkStatsManager , mais il est en retard sur l'utilisation en temps réel et " ne met pas à jour rapidement Assez ", c'est " signifiait fournir des données historiques ".

Remarque: je n'ai aucune affiliation avec aucune application orientée cédé.

lié:

  • restreindre une application pour envoyer un trafic Internet mais ne reçoit pas cela en arrière?
  • Pourquoi l'activité réseau est-elle détectée à partir d'applications après le pare-feu les bloque?
  • Capturer le trafic téléphonique mobile sur Wireshark

 

If you have rooted phone, go for nethogs (for live monitoring) or iptables (to get statistics) commandline tools. Using VPN or Android stats based apps is the only possible non-root solution. Or refer to this answer for a logcat/dumpsys based solution.


First of all, tracking a UID or PID of a network stream isn't straight forward because these aren't network related but OS related parameters. Proposals and abandoned projects do exist.

Android assigns a unique UID to every installed app just like every human user on Linux has a UID. So we can capture packets sent by a specific UID over the network interfaces to track the usage.

TCPDUMP:

Now how we can capture network traffic? Most of the network sniffers use libpcap family of system-independent libraries for this purpose. It supports BSD Packet Filter (BPF) for in-kernel packet filtering. Some popular utilities that use libpcap include tcpdump, nmap, tshark/wireshark, dumpcap, nethogs etc. Android app Network Utilities and others also make use of tcpdump.

However UID info is not propagated through the AF_PACKET/PF_PACKET channel that pcap uses at OSI Layer 2. So what we can do here is to make use of network sockets (combination of IP and port) being created and used by an app. netstat -tup or ss -tup will show all network sockets with active/established connections. Both tools are available on Android (or you can get a static binary), ss is the newer one. Socket vs. UID information can also be directly read from /proc/net/{tcp,udp}. Android app Netstat Plus works on same principle. This will provide Local Address (socket) being used by a process.

Once we know what sockets are being used by an app (UID), tcpdump -i wlan0 src <IP> and port <PORT> will dump the whole traffic originated from that process.
Similarly a remote socket (if not connected to by multiple apps) can also be used for filtering results.

LIMITATIONS:

However there are some issues with this approach:

  • Android apps usually launch more than one process at a time in parallel i.e. multiple PIDs working under same UID. So we have to capture traffic from all processes.
  • Apps keep on creating and deleting sockets. Keeping track of continuously changing sockets is almost impossible particularly when there are a large number of apps accessing network simultaneously.
  • There is - though rare - possibility that local sockets are being shared by multiple processes on UNIX-like OS's. Remote shared sockets such as UDP/53 which is used for DNS resolution cannot be tracked for a single process. This further weakens the approach.

NetHogs traverses procfs and copes with the above limitations (though not always very successful):

IPTABLES:

The above described shortcomings of a Layer 2 tool can be mitigated using iptables LOG or NFLOG. Layer 2 is just above the Physical Layer i.e. it's the last thing packets encounter before leaving the device. That's why, being at Data Link Layer and working at lower level of net stack, BPF is a kind of stateless packet filtering mechanism as compared to netfilter / iptables which works at OSI Layer 3 (nearer to userspace programs). So iptables can also get information from TCP/IP stack (Layer 4). It filters packets based on their creator UIDs using module owner that interacts with sockets to find packet ownership.

iptables writes to kernel log which can be read using dmesg or logcat. UID of an app can be obtained using some app or read from /data/system/packages.list or pm list packages -U.

# iptables -I OUTPUT -m owner --uid-owner <UID> -j LOG --log-level 7 --log-prefix 'SNIFFER: ' --log-uid # dmesg -w | grep SNIFFER 

Output can be saved to a file and formatted using tools like grep, awk, printf etc. Network Log - though very outdated - works in similar way. AFWall+ is a firewall based on iptables that can log / notify an app's network activity when the app is blocked.

The only downside with this approach is that it cannot be used to sniff traffic from one process when there are multiple processes running with same UID. iptables can't capture packets based on PIDs. They decided not to use iptables with processes because the process is started before it is blocked/sniffed, and program could easily spawn a child process with new PID which would not be blocked / sniffed. Also PIDs are created and destroyed as quick as sockets are. So there is always room for traffic being leaked.

QTAGUID:

owner module won't work for incoming or forwarded traffic because IP packets carry no ownership information. To measure per-app incoming / outgoing network usage, Android patched kernel to include qtaguid module. We can read statistics from /proc/net/xt_qtaguid/stats. With some shell scripting get live data usage since reboot:

However on Android 9+, qtaguid is being replaced with extended BPF (which is also planned to replace netfilter framework in Linux kernel). Related: Which process is responsible for capturing data usage?

IPTABLES + TCPDUMP:

An alternate is to put the outgoing traffic from an app in an NFLOG group and later tcpdump captures packets from that group:

# iptables -I OUTPUT -m owner --uid-owner 1000 -j NFLOG --nflog-group 30 # tcpdump -i nflog:30 

This is to ensure that we get closer to physical layer when sniffing outgoing traffic. But it can still give false positives e.g. if packets are dropped / lost in routing tables. That's why sniffers work at OSI layer 2. Or even better is to watch from outside e.g. using a proxy / VPN server or on a tethered PC or at router. But this won't capture traffic on per UID/PID basis.

OTHER OPTIONS:

  • Use diagnostic tools like strace to track syscalls related to network activity of a process. force_bind and tracedump also work on same principle. Linux kernel's audit subsystem can be used for the same.
  • Use Network classifier cgroup with iptables NETFILTER_XT_MATCH_CGROUP to sniff traffic from certain process(es).
  • Use Network Namespaces to isolate processes and read data usage on per interface basis. nstrace works on same principle.
  • If the intention is entirely to block traffic originating from certain processes, SELinux and seccomp can be used to restrict the processes' ability to create sockets by defining restricted policies and suppressing syscalls respectively.

Most of these are not straightforwardly viable options for Android and require advanced configurations.


ANDROID'S APIs (NON-ROOT OPTIONS):

Some apps like NetGuard use VpnService API of Android to block traffic at Layer 3 (TUN interface). The app can "notify when an application accesses the internet". Per app capturing and tracking (1, 2) is possible using VPN API as Android makes use of UIDs and SOcket_MARKs (1, 2) to control traffic in network Routing Policy (RPDB), just before leaving the device.

Some apps like NetLive make use of NetworkStatsManager, but it lags the real-time usage and "does not update quickly enough", it's "meant to provide historical data".

NOTE: I've no affiliation with any app referenced.


RELATED:

  • Restricting an app to only send internet traffic but not receive that back?
  • Why network activity is detected from apps after firewall blocks them?
  • Capturing mobile phone traffic on Wireshark
 
 
0
 
vote

Si vous voulez seulement suivre quelle application effectue des connexions à quel serveur je recommande l'application
Moniteur net à vous. Il agit comme un VPN local et est donc en mesure de détecter tout le trafic réseau. De plus, il montre quelle application a effectué la demande de réseau (y compris l'hôte distant, les ports et même si la connexion est simple ou SSL / TLS).

Par conséquent, si vous utilisez cette application en combinaison avec les outils de capture que vous avez déjà mentionnés dans votre question, vous devez pouvoir retrouver chaque connexion réseau.

 

If you only want to track which app performs connections to which server I recommend the app
Net Monitor to you. It acts as a local VPN and is therefore able to detect all network traffic. Furthermore it shows which app has performed the network request (including remote host, ports, and even if the connection is plain or SSL/TLS).

Therefore if you use this app in combination with the capture tools you already mentioned in your question you should able to trace back each and every network connection.

 
 

Questions connexes

42  Y a-t-il des inconvénients ou des risques pour limiter les processus d'arrière-plan?  ( Are there any downsides or risks to limiting background processes ) 
J'ai permis aux options de développeur sur mon Samsung Galaxy Grand-Duos, puis modifiée l'option "Processus de fond de limitation" de limite standard to pa...

7  Comment définir l'affinité CPU pour les tâches Android  ( How to set cpu affinity for android tasks ) 
J'ai un appareil Android à double core. Y a-t-il un moyen de définir l'affinité CPU pour les tâches Android? ...

0  toujours un mystère. Thumbdata3 espace de fichier et performance porc  ( Still a mystery thumbdata3 file space performance hog ) 
Je ne sais tout simplement pas comment résoudre ce problème. J'ai essayé presque tout et abandonner. J'ai lu d'autres threads sur quoi faire s'il y a .thumbd...

5  Commande de terminal racine pour tuer ou arrêter un service?  ( Root terminal command to kill or stop a service ) 
La dernière Pour mon appareil conserve l'apparition de la barre d'état même si le périphérique LiveView n'est pas connecté. Comme je ne trouve aucun moyen de...

19  Afficher les processus en cours d'exécution et l'utilisation de la CPU à Android 7 (Nougat)?  ( View running processes and cpu usage in android 7 nougat ) 
Dans les versions précédentes d'Android, lorsque la batterie de mon téléphone était rapidement descendante, je pourrais ouvrir une application comme OS MONIT...

3  Android 4.0.3 Lauchish: Nandd Process Process Hogging CPU  ( Android 4 0 3 sluggish nandd process hogging cpu ) 
J'ai un clone Allwinner A10 Tablet. Tout en travaillant, la tablette "gèle" régulièrement mais pas trop fréquemment pour une durée du temps entre 2 et 15 seco...

2  Pourquoi la machine virtuelle Dalvik doit-elle fonctionner dans chaque processus?  ( Why does dalvik virtual machine need to run in every process ) 
JVM et DVM fournissent un environnement virtuel. JVM n'a pas besoin d'être dans tous les processus. Pourquoi DVM doit-il être dans tous les processus? Merci. ...

3  "System_Server" - Bluetoothphoneservice provoque une utilisation élevée de la CPU  ( System server bluetoothphoneservice causes high cpu usage ) 
J'utilise Android 5.1 sur Nexus 4 et remarquez la batterie de la batterie plus rapidement que d'habitude il y a quelques mois. Pensant que je dois mettre à jo...

3  Comment afficher le trafic réseau demandé par une application spécifique?  ( How to view network traffic requested by a specific app ) 
Il y a beaucoup de discussions sur la manière de voir quelle application demande une connexion réseau. J'ai essayé les applications suivantes: tcapturepack...

1  Entrées d'application Unlld dans l'historique de la batterie. Méfiant?  ( Unlabled app entries appearing in battery history suspicious ) 
Ce matin, j'ai remarqué des entrées étranges sans titre dans mon historique de la batterie, que je n'avais jamais vu auparavant. Je ne sais pas non plus pourq...




© 2022 www.demandez.top All Rights Reserved. Questions et réponses Accueil Tous les droits sont réservés