Como monitoro o tráfego de rede enviado e recebido do meu emulador Android?
Como monitoro o tráfego de rede enviado e recebido do meu emulador Android?
Respostas:
Há duas maneiras de capturar o tráfego de rede diretamente de um emulador do Android:
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
).
Corra emulator -tcpdump emulator.cap -avd my_avd
para 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.
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.
avd
está localizado?
Também é possível usar o proxy http para monitorar solicitações http do emulador. Você pode transmitir -http-proxy
sinalizador 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 .
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 .
Charles
antes. Mas, tanto quanto eu posso ver, é específico de HTTP. Mas a pergunta do OP não é.
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.
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 tcpdump
executável na imagem do sistema executando no emulador (a maioria das imagens atuais possui, testado com imagens API 24 e API 27) e adbd
executando 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 -D
ele 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)
Você pode iniciar o emulador com o comando -avd Adfmf -http-proxy http://SYSTEM_IP:PORT
. Eu usei o HTTP Analyzer, mas deve funcionar para qualquer outra coisa. Mais detalhes podem ser encontrados aqui:
http://stick2code.blogspot.in/2014/04/intercept-http-requests-sent-from-app.html
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.
mitmproxy
antes. Mas, tanto quanto eu posso ver, é específico de HTTP. Mas a pergunta do OP não é.
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
Eu sugiro que você use o Wireshark .
Passos:
- Instale o Wireshark.
- Selecione a conexão de rede que você está usando para as chamadas (por exemplo, selecione o Wifi, se estiver usando)
- Haverá muitos pedidos e respostas, feche aplicativos extras.
- 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.