Emulador do Android: como monitorar o tráfego de rede?

Respostas:

104

Há duas maneiras de capturar o tráfego de rede diretamente de um emulador do Android:

  1. Copie e execute um binário tcpdump compatível com ARM no emulador, gravando a saída no cartão SD, talvez (por exemplo tcpdump -s0 -w /sdcard/emulator.cap).

  2. Corra emulator -tcpdump emulator.cap -avd my_avdpara gravar todo o tráfego do emulador em um arquivo local no seu PC

Nos dois casos, você pode analisar o arquivo pcap com tcpdump ou Wireshark normalmente.

Christopher Orr
fonte
Portanto, não é em tempo real / online? Quero dizer, os pacotes só podem ser analisados ​​no final?
Fikr4n
No primeiro caso, você pode analisar via stdout no dispositivo em vez de gravar em um arquivo. No segundo caso, você poderá transmitir / seguir o arquivo como está escrito. Ou você pode capturar o tráfego de rede na máquina host, e não no emulador.
Christopher Orr
Eu descobri que os emuladores que eu já uso têm o tcpdump instalado e o comando nº 1 funciona sem a instalação de um. Você também pode executá-lo com "adb -e shell tcpdump -s0 -w /sdcard/emulator.cap".
Les
2
Se você estiver usando segunda solução e você está recebendo The -tcpdump flag is not supported in QEMU2 yet and will be ignored.aviso, adicionar -Engine clássico para o seu comando como este: emulator -tcpdump emulator.cap -avd my_avd -engine classic. Isso forçará o mecanismo do emulador obsoleto, mas deve funcionar até que eles solucionem o problema.
lagoman
onde avdestá localizado?
user3806649
20

Também é possível usar o proxy http para monitorar solicitações http do emulador. Você pode transmitir -http-proxysinalizador ao iniciar um novo emulador para definir proxy ( arroto de exemplo ) para monitorar o tráfego do Android. Exemplo de uso ./emulator -http-proxy localhost:8080 -avd android2.2. Observe que, no meu exemplo, estou usando o Burp e ele está ouvindo a porta 8080. Mais informações podem ser encontradas aqui .

Waltsu
fonte
2
E sobre o tráfego https
pee2pee
10

Para o OS X, você pode usar o Charles , é simples e fácil de usar.

Para obter mais informações, consulte a publicação do blog Emulador do Android e Charles Proxy .

Tom Susel
fonte
1
Eu não sei Charlesantes. Mas, tanto quanto eu posso ver, é específico de HTTP. Mas a pergunta do OP não é.
você precisa saber é o seguinte
Charles também existe para Linux, eu o instalei no meu Ubuntu 18.04
Marecky 2/18/18
6

Uma versão atual do Android Studio não aplicava corretamente o -tcpdumpargumento. Ainda consegui capturar um despejo passando o parâmetro relacionado ao qemu da seguinte maneira:

tools/emulator -engine classic -tcpdump dump.cap -avd myAvd
Tad
fonte
5

Sim, o wireshark funcionará.

Eu não acho que exista uma maneira fácil de filtrar apenas o tráfego do emulador, pois ele vem do mesmo IP src.

Talvez a melhor maneira seja configurar um ambiente VMware muito simples e executar apenas o emulador, pelo menos dessa maneira não haveria muito tráfego em segundo plano.

Bitdivision
fonte
Boa sugestão, mas é difícil fazer com que um emulador seja executado em cima de uma VM. Você conseguiu que isso funcionasse?
21816 MikeSchem
Em quais problemas você se deparou? Eu não fiz isso sozinho, mas não consigo imaginar que haveria algum problema.
Bitdivision
No meu caso, os pedidos enviados estavam em verde, tudo o que fiz foi desligar outros navegadores e consegui identificar as linhas verdes agradáveis. Depois de localizar a solicitação, copie o endereço de destino e você poderá usá-lo no filtro, colocando ip.dst == "endereço IP que você copiou" e vendo apenas as solicitações relevantes.
Ritveak 30/01
4

Agora é possível usar o Wireshark diretamente para capturar o tráfego do emulador do Android. Existe um plugin extcap chamado androiddump, que torna possível. Você precisa ter um tcpdumpexecutável na imagem do sistema executando no emulador (a maioria das imagens atuais possui, testado com imagens API 24 e API 27) e adbdexecutando como raiz no host (basta executar adb root). Na lista de interfaces disponíveis no Wireshark (apenas na versão Qt, o GTK + obsoleto não o possui) ou na lista mostrada com tshark -Dele deve haver várias interfaces Android que permitem detectar o tráfego Bluetooth, Logcat ou Wifi, por exemplo:

android-wifi-tcpdump-emulator-5554 (Android WiFi Android_SDK_built_for_x86 emulator-5554)

Moriarty
fonte
2

Você pode usar http://docs.mitmproxy.org/en/stable/install.html

É fácil de configurar e não requer ajustes extras.

Eu passo por várias ferramentas, mas achei que era realmente bom e fácil.

Dhiraj Himani
fonte
Eu não sei mitmproxyantes. Mas, tanto quanto eu posso ver, é específico de HTTP. Mas a pergunta do OP não é.
você precisa saber é o seguinte
1
Novo Android Studio 3.0 fornece criador de perfil, você pode usá-lo. E para o mitm, ele fornece todos os tipos de protocolos, http, https, etc. Você só precisa configurar o proxy corretamente.
Dhiraj Himani
Está disponível para capturar pacotes de aplicativos não desenvolvidos por mim? E em um emulador de terceiros, como o Nox App Player? Obrigado!
Siu Ching Pong -Asuka Kenji-
1
Sim, você deve ter o certificado mitm instalado no seu emulador / dispositivo, fornecido pelo próprio mitm, e você pode usá-lo para assistir à solicitação em andamento e respostas correspondentes.
Dhiraj Himani
2

Você pode monitorar o tráfego de rede no Android Studio. Vá para o Android Monitor e abra a guia Rede.

http://developer.android.com/tools/debugging/ddms.html

ATUALIZAÇÃO: ⚠️ O Android Device Monitor foi descontinuado no Android Studio 3.1. Veja mais em https://developer.android.com/studio/profile/monitor

Fivos
fonte
5
você pode dizer de onde abrir a guia de uso da rede de detalhes no android studio 1.5 (windows), como mostra a imagem no link, estou recebendo apenas um gráfico, mas não detalhes?
Shreyans Jain
Esteja ciente de que esta opção fornece informações limitadas. Não consegui resolver meus problemas onde quero descobrir por que uma solicitação foi negada, porque o Android não me disse nada sobre essa solicitação. O violinista é mais adequado aqui.
Highriser
2

Eu sugiro que você use o Wireshark .

Passos:

  1. Instale o Wireshark.
  2. Selecione a conexão de rede que você está usando para as chamadas (por exemplo, selecione o Wifi, se estiver usando)
  3. Haverá muitos pedidos e respostas, feche aplicativos extras.
  4. Normalmente, as solicitações estão na cor verde. Depois de identificar sua solicitação, copie o endereço de destino e use o filtro por cima, digitando ip.dst==52.187.182.185, colocando o endereço de destino.

Você pode usar outras técnicas de filtragem mencionadas aqui para obter tráfego específico.

Ritveak
fonte