Émulateur Android: comment surveiller le trafic réseau?

Réponses:

104

Il existe deux façons de capturer le trafic réseau directement à partir d'un émulateur Android:

  1. Copiez et exécutez un binaire tcpdump compatible ARM sur l'émulateur, en écrivant la sortie sur la carte SD, peut-être (par exemple tcpdump -s0 -w /sdcard/emulator.cap).

  2. Exécutez emulator -tcpdump emulator.cap -avd my_avdpour écrire tout le trafic de l'émulateur dans un fichier local sur votre PC

Dans les deux cas, vous pouvez ensuite analyser le fichier pcap avec tcpdump ou Wireshark comme d'habitude.

Christophe Orr
la source
Ce n'est donc pas en temps réel / en ligne? Je veux dire, les paquets ne peuvent être analysés qu'à la fin?
fikr4n du
Dans le premier cas, vous pouvez analyser via stdout sur l'appareil plutôt que d'écrire dans un fichier. Dans le second cas, vous pourrez peut-être diffuser / suivre le fichier au fur et à mesure qu'il est écrit. Ou vous pouvez capturer le trafic réseau sur la machine hôte, plutôt que sur l'émulateur.
Christopher Orr
J'ai trouvé que les émulateurs que j'utilise ont déjà installé tcpdump, et la commande n ° 1 fonctionne sans en installer un. Vous pouvez également l'exécuter avec "adb -e shell tcpdump -s0 -w /sdcard/emulator.cap".
Les
2
Si vous utilisez 2ème solution et vous obtenez The -tcpdump flag is not supported in QEMU2 yet and will be ignored.avertissement, ajoutez -engine classique à votre commande comme ceci: emulator -tcpdump emulator.cap -avd my_avd -engine classic. Cela forcera le moteur d'émulation obsolète, mais devrait fonctionner jusqu'à ce qu'ils résolvent le problème.
lagoman
avdse trouve le?
user3806649
20

Il est également possible d'utiliser le proxy http pour surveiller les requêtes http de l'émulateur. Vous pouvez passer le -http-proxydrapeau lors du démarrage d'un nouvel émulateur pour définir le proxy (exemple burp ) pour surveiller le trafic Android. Exemple d'utilisation ./emulator -http-proxy localhost:8080 -avd android2.2. Notez que dans mon exemple, j'utilise Burp, et il écoute le port 8080. Plus d'informations peuvent être trouvées ici .

Waltsu
la source
2
Qu'en est-il du trafic https
pee2pee
10

Pour OS X, vous pouvez utiliser Charles , c'est simple et facile à utiliser.

Pour plus d'informations, veuillez consulter le billet de blog Android Emulator et Charles Proxy .

Tom Susel
la source
1
Je ne sais pas Charlesavant. Mais pour autant que je puisse voir, c'est spécifique à HTTP. Mais la question du PO ne l'est pas.
Siu Ching Pong -Asuka Kenji-
Charles existe aussi pour Linux, je l'ai installé sur mon Ubuntu 18.04
Marecky
6

Une version actuelle d'Android Studio n'a pas correctement appliqué l' -tcpdumpargument. J'étais toujours capable de capturer un vidage en passant le paramètre associé à qemu comme suit:

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

Oui, WireShark fonctionnera.

Je ne pense pas qu'il existe un moyen facile de filtrer uniquement le trafic d'émulateur, car il provient de la même adresse IP src.

La meilleure façon serait peut-être de configurer un environnement VMware très nu et d'exécuter uniquement l'émulateur là-dedans, du moins de cette façon, il n'y aurait pas trop de trafic en arrière-plan.

Bitdivision
la source
Bonne suggestion, mais il est difficile de faire fonctionner un émulateur au-dessus d'une VM. Avez-vous réussi à faire fonctionner cela?
MikeSchem
Quels problèmes avez-vous rencontrés? Je ne l'ai pas fait moi-même, mais je ne peux pas imaginer qu'il y aurait des problèmes.
Bitdivision
Dans mon cas, les demandes envoyées étaient en vert, je n'ai fait que fermer les autres navigateurs et j'ai pu repérer les douces lignes vertes. Une fois que vous avez repéré la demande, copiez l'adresse de destination et vous pouvez ensuite l'utiliser dans le filtre en mettant ip.dst == "adresse IP que vous avez copiée" et en ne voyant que les demandes pertinentes.
Ritveak
4

Il est désormais possible d'utiliser Wireshark directement pour capturer le trafic de l'émulateur Android. Il existe un plugin extcap appelé androiddump qui le rend possible. Vous devez avoir un tcpdumpexécutable dans l'image système en cours d'exécution sur l'émulateur (la plupart des images actuelles l'ont, testé avec les images API 24 et API 27) et adbds'exécutant en tant que root sur l'hôte (exécutez simplement adb root). Dans la liste des interfaces disponibles dans Wireshark (version Qt uniquement, le GTK + obsolète ne l'a pas) ou la liste affichée avec tshark -Dil devrait y avoir plusieurs interfaces Android permettant de renifler le trafic Bluetooth, Logcat ou Wifi, par exemple:

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

Prof. Moriarty
la source
2

Vous pouvez utiliser http://docs.mitmproxy.org/en/stable/install.html

Il est facile à installer et ne nécessitera aucune modification supplémentaire.

Je passe par divers outils mais je trouve que c'est vraiment bon et facile.

Dhiraj Himani
la source
Je ne sais pas mitmproxyavant. Mais pour autant que je puisse voir, c'est spécifique à HTTP. Mais la question du PO ne l'est pas.
Siu Ching Pong -Asuka Kenji-
1
Le nouvel Android Studio 3.0 fournit un profileur, vous pouvez l'utiliser. Et pour mitm, il fournit toutes sortes de protocoles, http, https, etc. Il vous suffit de configurer correctement le proxy.
Dhiraj Himani
Est-il disponible pour capturer des paquets à partir d'applications non développées par moi? Et sur un émulateur tiers tel que Nox App Player? Merci!
Siu Ching Pong -Asuka Kenji-
1
Oui, vous devriez avoir le certificat mitm installé sur votre émulateur / appareil, qui est fourni par mitm lui-même, et vous pouvez l'utiliser pour regarder la demande en cours et les réponses correspondantes.
Dhiraj Himani
2

Vous pouvez surveiller le trafic réseau depuis Android Studio. Accédez à Moniteur Android et ouvrez l'onglet Réseau.

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

MISE À JOUR: ⚠️ Android Device Monitor est obsolète dans Android Studio 3.1. En savoir plus sur https://developer.android.com/studio/profile/monitor

Fivos
la source
5
pouvez-vous dire d'où ouvrir l'onglet d'utilisation du réseau détaillé dans Android Studio 1.5 (Windows) comme indiqué dans l'image dans le lien, je ne reçois qu'un graphique mais pas de détails?
Shreyans jain
Sachez que cette option donne un aperçu limité. Je n'ai pas pu résoudre mes problèmes lorsque je veux savoir pourquoi une demande a été refusée, car Android ne m'a rien dit à propos de cette demande. Fiddler est plus approprié ici.
Highriser
2

Je vous suggère d'utiliser Wireshark .

Pas:

  1. Installez Wireshark.
  2. Sélectionnez la connexion réseau que vous utilisez pour les appels (par exemple, sélectionnez le Wifi si vous l'utilisez)
  3. Il y aura de nombreuses demandes et réponses, fermer les applications supplémentaires.
  4. Habituellement, les demandes sont de couleur verte, une fois que vous avez repéré votre demande, copiez l'adresse de destination et utilisez le filtre en haut en tapant ip.dst==52.187.182.185en mettant l'adresse de destination.

Vous pouvez utiliser d'autres techniques de filtrage mentionnées ici pour obtenir un trafic spécifique.

Ritveak
la source