Como visualizar o tráfego de rede solicitado por um aplicativo específico? -- applications campo com networking campo com internet campo com data-monitoring campo com processes camp android Relacionado O problema

How to view network traffic requested by a specific app?


3
vote

problema

português

Há muita discussão sobre como ver qual aplicativo está solicitando conexão de rede. Eu tentei os seguintes aplicativos:

  tcapturepacket wifi monitor connection tracker    

No entanto, nenhum deles era útil. Por exemplo, por um curto período de tempo, eu carreguei um arquivo de pcap de 30kb que pode ser visualizado Aqui < / a>. Ainda não descobri qual aplicativo está solicitando conexão e para onde está tentando se conectar.

Eu também tentei olhar para adb logcat , mas não encontrou informações úteis. Talvez algo tenha sido perdido aqui. Qualquer palpite?

Inglês Original

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?

              

Lista de respostas

5
 
vote

Se você tiver telefone enraizado, vá para nethogs (para monitoramento ao vivo) ou abcdefghijklmn2 (para obter estatísticas) ferramentas de comando. Usar aplicativos baseados em estatísticas de VPN ou Android é a única solução não-raiz possível. Ou referir-se a Esta resposta para um logcat / dumpsys Solução baseada.


Primeiro de tudo, rastrear um UID ou PID de um fluxo de rede não é direto porque estes não são parâmetros relacionados ao OS Network. propostas e projetos abandonados Existem.

Android atribui um uid exclusivo a cada aplicativo instalado, assim como todo usuário humano no Linux tem um UID. Portanto, podemos capturar pacotes enviados por um UID específico sobre as interfaces de rede para rastrear o uso.

tcpdump:

Agora, como podemos capturar tráfego de rede? A maioria dos sniffers de rede usa libpcap Família de bibliotecas independentes do sistema para este fim . Ele suporta filtro de pacote BSD (BPF) para filtragem de pacotes no kernel. Alguns utilitários populares que o uso libpcap incluir tcpdump , nmap , tshark/wireshark , dumpcap , nethogs0 etc. Android app utilitários de rede e outros também fazem uso de nethogs1 .

No entanto, informações UID não são propagadas através do nethogs2 / nethogs3 canal que nethogs4 usa em Layer 2 . Então, o que podemos fazer aqui é fazer uso de soquetes de rede (combinação de IP e porta) sendo criados e usados ​​por um aplicativo. ABCDEFGHIJKLMNABCDEFGHIJKLMN15 ou ABCDEFGHIJKLMNABCDEFGHIJKLMN16 Mostrará todos os soquetes de rede com conexões ativas / estabelecidas. Ambas as ferramentas estão disponíveis no Android (ou você pode obter um binário estático), nethogs7 é o mais novo. soquete vs. uid Informações também pode ser ler diretamente a partir de nethogs8 . App android netstat plus funciona no mesmo princípio . Isso fornecerá endereço local (soquete) sendo usado por um processo.

Uma vez sabemos que soquetes estão sendo usados ​​por um aplicativo (UID), nethogs9 vai despejar todo o tráfego originado desse processo.
Da mesma forma, um soquete remoto (se não estiver conectado a vários aplicativos), também pode ser usado para filtrar os resultados.

limitações:

No entanto, existem alguns problemas com esta abordagem:

  • aplicativos Android geralmente lançam mais de um processo de cada vez em paralelo I.E. Múltiplos PIDs trabalhando no mesmo UID . Então, temos que capturar tráfego de todos os processos.
  • aplicativos continuam criando e excluindo soquetes. Acompanhamento de Soquetes mudando continuamente é quase impossível particularmente quando há um grande número de aplicativos que acessam a rede simultaneamente.
  • Há - embora raro - possibilidade de que os soquetes local estejam sendo compartilhados por vários processos no sistema operacional Unix. Soquetes compartilhados remotos, como UDP / 53, que é usado para resolução DNS não pode ser rastreado para um único processo. Isso enfraquece ainda mais a abordagem.

nethogs abcdefghijklmn20 e copes com as limitações acima (embora nem sempre muito bem-sucedidas):

iptables:

As laconas descritas acima de uma ferramenta de camada 2 podem ser mitigadas usando iptables iptables1

ou iptables2 . Layer 2 é logo acima da camada física, isto é, é a última coisa que os pacotes encontram antes de sair do dispositivo. É por isso que, estando na camada de link de dados e trabalhando a nível inferior de pilha líquida, a BPF é uma espécie de mecanismo de filtragem de pacote apático, em comparação com abcdefghijklmn23 / abcdefghijklmn24 que funciona na OSI Layer 3 (mais próximo dos programas do Usepace). Então, ABCDEFGHIJKLMNABCDEFGHIJKLMN25 Também pode obter informações da pilha TCP / IP ( Layer 4 ). Ele filtra os pacotes com base em seus uids criadores usando o módulo iptables6 que interage com soquetes para encontrar propriedade de pacotes.

iptables7 grava para o registro do kernel que pode ser lido usando iptables8 ou abcdefghijklmnAbcdefghijklmn29 . UID de um aplicativo pode ser obtido usando algum aplicativo ou lido de logcat0 ou abcdefghijklmn41 .

  logcat2   

A saída pode ser salva em um arquivo e formatada usando ferramentas como abcdefghijklmn43 , abcdefghijklmn44 , abcdefghijklmn45 etc. registro de rede - Embora muito desatualizado - funciona de maneira semelhante. AFWALL + é um firewall baseado em ABCDEFGHIJKLMNABCDEFGHIJKLMN36 que pode registrar / notificar a rede de um aplicativo atividade quando o aplicativo está bloqueado.

A única desvantagem com essa abordagem é que ela não pode ser usada para cheirar o tráfego de um processo quando houver vários processos em execução com o mesmo uid . ABCDEFGHIJKLMNABCDEFGHIJKLMN37 Não é possível capturar pacotes baseados em PIDs. Eles decidiram não usar ABCDEFGHIJKLMNABCDEFGHIJKLMN38 Com os processos Porque o processo é iniciado antes de ser bloqueado / cheirado, e o programa pode facilmente desovar um processo filho com o novo PID que não seria bloqueado / cheirado. Também os PIDs são criados e destruídos tão rápidos quanto os soquetes são. Então, há sempre espaço para o tráfego que está sendo vazado.

qtaguid:

logcat9 módulo não funciona para tráfego de entrada ou encaminhado porque os pacotes IP não possuem informações de propriedade. Para medir o uso de rede de entrada / saída, o kernel remendado ao Android para incluir ABCDEFGHIJKLMNABCDEFGHIJKLMN40 Módulo. Podemos ler estatísticas de dumpsys1 . Com alguns scripts shell, obtenha o uso de dados ao vivo desde a reinicialização:

No entanto no Android 9+, dumpsys2 está sendo substituído com estendido BPF (que também é planejado para < um href = "https://cilium.io/blog/2018/04/17/why-is-the-kernel-the-kernel-community-replacing-ptables/" rel = "NOFOLOGE NOREFERRER"> substituir dumpsys3 framework no kernel Linux). Relacionado: Qual processo é responsável por capturar o uso de dados?

iptables + tcpdump:

Um suplente é colocar o tráfego de saída de um aplicativo em um abcdefghijklmn44 grupo e posterior Tcpdump captura pacotes desse grupo:

  dumpsys5   

Isso é para garantir que nos aproximamos da camada física ao cheirar o tráfego de saída. Mas ainda pode dar falsos positivos e. Se os pacotes forem descarados / perdidos em tabelas de roteamento. É por isso que Sniffers Trabalhe na Layer OSI 2. Ou melhor é melhor assistir de fora, por exemplo usando um servidor proxy / vpn ou em um PC amarrado ou no roteador. Mas Thi. não captura o tráfego por UID / PID base.

Outras opções:

  • Use ferramentas de diagnóstico como dumpsys6 para rastrear dumpsys7 relacionado à atividade de rede de um processo. force_bind e TRADCHUMT também funciona no mesmo princípio. Linux Kernel's subsistema de auditoria pode ser usado para o mesmo.
  • use Classificador de rede Cgroup com dumpsys8 dumpsys9 Para cheirar o tráfego de determinado processo (s).
  • Use libpcap0 para isolar processos e ler o uso de dados por interface. nstrange funciona no mesmo princípio.
  • Se a intenção for intencionalmente para bloquear o tráfego originário de certos processos, abcdefghijklmn51 e libpcap2 pode ser usado para restringir a capacidade dos processos para criar soquetes definindo libpcap3 e supressing libpcap4 respectivamente.

A maioria destes não são opções diretas para o Android e exigem configurações avançadas.


APIs do Android (opções não raiz):

Alguns aplicativos como NetGuard Use vpnservice API do Android para bloquear o tráfego na Camada 3 (TUN interface). O aplicativo pode "notificar quando um aplicativo acessar a Internet" . Por aplicativo capturando e rastreamento ( 1 , 2 ) é possível usar a VPN API Como o Android faz uso de libpcap5 e libpcap6 ( 1 , 2 ) para controlar o tráfego na política de roteamento de rede ( RPDB ), pouco antes de sair do dispositivo.

Alguns aplicativos como netlive fazer uso de networkstatsmager , mas fica o uso em tempo real e " não atualiza rapidamente o suficiente ", é " significava fornecer dados históricos ".

Nota: Não tenho afiliação com qualquer aplicativo referenciado.


relacionado:

  • Restringir um aplicativo para enviar apenas o tráfego da Internet, mas não receber isso de volta?
  • Por que a atividade de rede é detectada de aplicativos após o firewall os bloqueia?
  • Capturando o tráfego do telefone celular no 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

Se você quiser apenas rastrear qual aplicativo executa conexões para qual servidor eu recomendo o aplicativo
Monitor líquido para você. Ele atua como VPN local e, portanto, é capaz de detectar todo o tráfego de rede. Além disso, mostra qual aplicativo executou a solicitação de rede (incluindo host remoto, portas e, mesmo se a conexão é simples ou SSL / TLS).

Portanto, se você usar este aplicativo em combinação com as ferramentas de captura que você já mencionou em sua pergunta, você deve traçar de volta todas as conexões de rede.

 

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.

 
 

Perguntas relacionadas

0  Nexus 10 não reconhecido no Debian Wheezy / Mac OS / Windows 8 com ADB  ( Nexus 10 not recognized on debian wheezy mac os windows 8 with adb ) 
Estou tentando conectar meu tablet Nexus 10 + Android 4.4 + Cyanogen-Mod 11 para o meu computador desktop, onde instalei o Debian Wheezy usando ADB. Trabalhou...

3  Eu tenho menos de 40 aplicativos (incluindo aplicativos do sistema); O que mais posso remover?  ( I have less than 40 apps including system apps what else can i remove ) 
Estou tentando remover o máximo de bloatware possível, mas não há informações sobre algumas delas no Google. Aqui está a lista de aplicativos que eu não tenho...

6  Como determinar quais aplicativos estão usando quais recursos no Android?  ( How to determine what applications are using what features on android ) 
Com sua multitarefa, é fácil lançar muitos aplicativos no Android. Eu entendo que os aplicativos de fundo usam recursos bastante mínimos, mas freqüentemente a...

0  Quais são esses ícones em um Android?  ( What are these icons on an android ) 
Alguém poderia, por favor, diga o que esses aplicativos são? ...

1  Apps Android não podem acessar meu armazenamento de cartão SD, mas os gerentes de arquivos podem  ( Android apps cant access my sd card storage but file managers can ) 
Apps como o YouTube, Netflix, Prime Video não possuem uma opção "Store to SD". Eu tentei 3 cartões SD diferentes com meu telefone, formatá-los, mas ainda assi...

6  Por que as notificações "atualizadas com sucesso" desaparecem?  ( Why do the successfully updated notifications disappear ) 
Eu notei um comportamento estranho ao atualizar aplicativos com o mais recente de gengibre (2.3.5?) e agora o sanduíche de sorvete (4.0.3) constrói. Também po...

4  Por que vejo anúncios depois de fechar o Whatsapp?  ( Why do i see adverts after closing whatsapp ) 
Toda vez que feche o WhatsApp Eu recebo algum tipo de anúncio. De acordo com o seu site Eles não anunciam, mas vejo anúncios como Isso depois de fechar o ...

0  Onde estão baixados aplicativos salvos quando instalados no cartão SD?  ( Where are downloaded apps saved when installed on sd card ) 
ontem Eu tinha ~ 40 MB de espaço livre no meu Android 2.2.1 Samsung GT-S5570. Eu queria instalar Facebook app, então eu baixei de Play Store e, em seguida...

19  Como posso encontrar um telefone perdido ou ajudar as pessoas a devolvê-lo?  ( How can i find a lost phone or help people return it ) 
Estou à procura de um aplicativo como Onde está o meu droid para ajudar a localizar um dispositivo perdido. Idealmente estou esperando que haja um que p...

20  Existe um player de música que suporta contagens de jogos e playlists inteligentes? [fechado]  ( Is there a music player that supports play counts and smart playlists ) 
. FECHADO. Esta questão é off-tópico . Atualmente não está aceitando respostas. Quer melh...

0  Escolha um aplicativo específico para abrir um arquivo específico  ( Choose a specific app to open a particular file ) 
Eu criei algum e-learning usando o enredo articulado 2 que eu quero ver no meu Samsung Galaxy. Os arquivos estão fisicamente na pasta de documentos. O módulo ...

8  Aplicações: Rollback Última atualização [Duplicado]  ( Applications rollback latest update ) 
. Esta pergunta já tem respostas aqui : Como rebaixar um aplicativo se tiver foi atualizado via play ...

10  Como posso ver apenas classificações de uma estrela na Google Play Store?  ( How can i view only one star ratings in google play store ) 
Eu acho bastante irritante que não há maneira fácil de ordenar os comentários de um aplicativo para Android: - Nem posso procurar por certas palavras-chave qu...

6  Existe um bom aplicativo que me permite às atualizações do aplicativo de uma só vez?  ( Is there a good app that lets me to the app updates in one go ) 
Agora no mercado você tem que atualizar manualmente cada aplicativo, há um aplicativo que automatiza isso? ...

3  Existe um programa que vai registrar cada programa que eu começo no meu dispositivo Android?  ( Is there a program which will log each program i start on my android device ) 
Eu estou procurando um programa que conte cada início de um programa no meu dispositivo Android. ao longo do tempo, você instala um monte de programas. ...




© 2021 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.