Emulador de Android: ¿Cómo monitorear el tráfico de red?

Respuestas:

104

Hay dos formas de capturar el tráfico de red directamente desde un emulador de Android:

  1. Copie y ejecute un binario tcpdump compatible con ARM en el emulador, escribiendo la salida en la tarjeta SD, tal vez (por ejemplo tcpdump -s0 -w /sdcard/emulator.cap).

  2. Ejecute emulator -tcpdump emulator.cap -avd my_avdpara escribir todo el tráfico del emulador en un archivo local en su PC

En ambos casos, puede analizar el archivo pcap con tcpdump o Wireshark como de costumbre.

Christopher Orr
fuente
¿Entonces no es en tiempo real / en línea? Quiero decir, ¿los paquetes solo se pueden analizar al final?
fikr4n
En el primer caso, podría analizar mediante stdout en el dispositivo en lugar de escribir en un archivo. En el segundo caso, es posible que pueda transmitir / seguir el archivo tal como está escrito. O puede capturar el tráfico de red en la máquina host, en lugar de hacerlo en el emulador.
Christopher Orr
He encontrado que los emuladores que uso ya tienen instalado tcpdump, y el comando # 1 funciona sin instalar uno. También puede ejecutarlo con "adb -e shell tcpdump -s0 -w /sdcard/emulator.cap".
Les
2
Si está utilizando segunda solución y que está recibiendo The -tcpdump flag is not supported in QEMU2 yet and will be ignored.la advertencia, agregue -motor clásico a su orden como la siguiente: emulator -tcpdump emulator.cap -avd my_avd -engine classic. Esto forzará un motor de emulador obsoleto, pero debería funcionar hasta que solucionen el problema.
lagoman
donde avdse encuentra el
user3806649
20

También es posible usar el proxy http para monitorear las solicitudes http del emulador. Puede pasar la -http-proxybandera al iniciar un nuevo emulador para configurar el proxy (ejemplo eructo ) para monitorear el tráfico de Android. Ejemplo de uso ./emulator -http-proxy localhost:8080 -avd android2.2. Tenga en cuenta que en mi ejemplo estoy usando Burp, y está escuchando el puerto 8080. Puede encontrar más información aquí .

Waltsu
fuente
2
¿Qué pasa con el tráfico https
Pee2pee
10

Para OS X puede usar Charles , es simple y fácil de usar.

Para obtener más información, eche un vistazo a la publicación del blog Emulador de Android y Charles Proxy .

Tom Susel
fuente
1
No lo se Charlesantes. Pero por lo que puedo ver, es específico de HTTP. Pero la pregunta del OP no lo es.
Siu Ching Pong -Asuka Kenji-
Charles también existe para Linux, lo tengo instalado en mi Ubuntu 18.04
Marecky
6

Una versión actual de Android Studio no aplicó correctamente el -tcpdumpargumento. Todavía pude capturar un volcado pasando el parámetro relacionado a qemu de la siguiente manera:

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

Sí, Wirehark funcionará.

No creo que haya una manera fácil de filtrar únicamente el tráfico del emulador, ya que proviene de la misma IP src.

Quizás la mejor manera sería configurar un entorno VMware muy simple y solo ejecutar el emulador allí, al menos de esa manera no habría demasiado tráfico de fondo.

Bitdivision
fuente
Buena sugerencia, pero es difícil hacer que un emulador se ejecute sobre una VM. ¿Has conseguido que esto funcione?
MikeSchem
¿Con qué problemas te has encontrado? No lo he hecho yo mismo, pero no puedo imaginar que haya algún problema.
Bitdivision
En mi caso, las solicitudes enviadas estaban en verde, todo lo que hice fue apagar otros navegadores y pude detectar las dulces filas verdes. Una vez que detecte la solicitud, copie la dirección de destino y luego puede usarla en el filtro colocando ip.dst == "dirección IP que copió" y viendo solo las solicitudes relevantes.
Ritveak
4

Ahora es posible usar Wireshark directamente para capturar el tráfico del emulador de Android. Hay un complemento extcap llamado androiddump que lo hace posible. Debe tener un tcpdumparchivo ejecutable en la imagen del sistema que se ejecute en el emulador (la mayoría de las imágenes actuales lo tienen, probado con imágenes API 24 y API 27) y que se adbdejecuta como raíz en el host (solo ejecutar adb root). En la lista de las interfaces disponibles en Wireshark (solo la versión Qt, el GTK + obsoleto no lo tiene) o la lista que se muestra con tshark -Ddebería haber varias interfaces de Android que permitan detectar el tráfico de Bluetooth, Logcat o Wifi, por ejemplo:

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

Prof. Moriarty
fuente
2

Puede usar http://docs.mitmproxy.org/en/stable/install.html

Es fácil de configurar y no requerirá ajustes adicionales.

Reviso varias herramientas, pero me pareció muy bueno y fácil.

Dhiraj Himani
fuente
No lo se mitmproxyantes. Pero por lo que puedo ver, es específico de HTTP. Pero la pregunta del OP no lo es.
Siu Ching Pong -Asuka Kenji-
1
El nuevo Android Studio 3.0 proporciona un generador de perfiles, puede usar eso. Y para mitm proporciona todo tipo de protocolos, http, https, etc. Solo necesita configurar el proxy correctamente.
Dhiraj Himani
¿Está disponible para capturar paquetes de aplicaciones no desarrolladas por mí? ¿Y en un emulador de terceros como Nox App Player? ¡Gracias!
Siu Ching Pong -Asuka Kenji-
1
Sí, debe tener el certificado mitm instalado en su emulador / dispositivo, que lo proporciona mitm, y puede usarlo para ver la solicitud en curso y las respuestas correspondientes.
Dhiraj Himani
2

Puede monitorear el tráfico de red desde Android Studio. Vaya a Monitor de Android y abra la pestaña Red.

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

ACTUALIZACIÓN: ⚠️ Android Device Monitor quedó en desuso en Android Studio 3.1. Ver más en https://developer.android.com/studio/profile/monitor

Fivos
fuente
55
¿puede decir desde dónde abrir la pestaña de uso de red detallada en android studio 1.5 (windows) como se muestra en la imagen en el enlace, solo obtengo un gráfico pero no detalles?
Shreyans jain
Tenga en cuenta que esta opción ofrece información limitada. No pude resolver mis problemas donde quiero averiguar por qué se rechazó una solicitud, porque Android no me dijo nada sobre esta solicitud. Fiddler es más adecuado aquí.
Highriser
2

Te sugiero que uses Wireshark .

Pasos:

  1. Instala Wireshark.
  2. Seleccione la conexión de red que está usando para las llamadas (por ejemplo, seleccione el Wifi si lo está usando)
  3. Habrá muchas solicitudes y respuestas, cerrar aplicaciones adicionales.
  4. Por lo general, las solicitudes son de color verde, una vez que detecte su solicitud, copie la dirección de destino y use el filtro en la parte superior escribiendo escribiendo ip.dst==52.187.182.185la dirección de destino.

Puede utilizar otras técnicas de filtrado mencionadas aquí para obtener tráfico específico.

Ritveak
fuente