Эмулятор Android: как отслеживать сетевой трафик?

Ответы:

104

Есть два способа захвата сетевого трафика непосредственно из эмулятора Android:

  1. Скопируйте и запустите ARM-совместимый двоичный файл tcpdump на эмуляторе, возможно, записав вывод на SD-карту (например tcpdump -s0 -w /sdcard/emulator.cap).

  2. Запустите, emulator -tcpdump emulator.cap -avd my_avdчтобы записать весь трафик эмулятора в локальный файл на вашем ПК

В обоих случаях вы можете проанализировать файл pcap с помощью tcpdump или Wireshark как обычно.

Кристофер Орр
источник
Значит, это не в реальном времени / онлайн? То есть пакеты можно анализировать только в конце?
fikr4n
В первом случае вы можете анализировать через стандартный вывод на устройстве, а не писать в файл. Во втором случае вы можете транслировать / отслеживать файл по мере его написания. Или вы можете захватить сетевой трафик на хост-машине, а не на эмуляторе.
Кристофер Орр
Я обнаружил, что в эмуляторах, которые я использую, уже установлен tcpdump, и команда №1 работает без установки. Вы также можете запустить его с помощью «adb -e shell tcpdump -s0 -w /sdcard/emulator.cap».
Les
2
Если вы используете 2 - ое решение , и вы получаете The -tcpdump flag is not supported in QEMU2 yet and will be ignored.предупреждение, добавьте - движок классический для вашей команды , как это: emulator -tcpdump emulator.cap -avd my_avd -engine classic. Это приведет к принудительному использованию устаревшего движка эмулятора, но он должен работать, пока проблема не будет устранена.
lagoman
где avdнаходится?
user3806649 08
20

Также можно использовать http-прокси для отслеживания http-запросов от эмулятора. Вы можете передать -http-proxyфлаг при запуске нового эмулятора, чтобы установить прокси (пример burp ) для мониторинга трафика Android. Пример использования ./emulator -http-proxy localhost:8080 -avd android2.2. Обратите внимание, что в моем примере я использую Burp, и он прослушивает порт 8080. Более подробную информацию можно найти здесь .

Waltsu
источник
2
Как насчет https-трафика
pee2pee
10

Для OS X вы можете использовать Charles , это просто и удобно.

Для получения дополнительной информации, пожалуйста, ознакомьтесь с публикацией в блоге Android Emulator и Charles Proxy .

Том Сюзель
источник
1
Не знаю Charlesраньше. Но, насколько я понимаю, он специфичен для HTTP. Но вопрос ОП - нет.
Сиу Чинг Понг - Асука Кенджи -
Charles также существует для Linux, у меня он установлен на моем Ubuntu 18.04
Марекки
6

Текущая версия Android Studio неверно применила этот -tcpdumpаргумент. Мне все еще удалось захватить дамп, передав соответствующий параметр в qemu следующим образом:

tools/emulator -engine classic -tcpdump dump.cap -avd myAvd
Тэд
источник
5

Да, wirehark будет работать.

Я не думаю, что есть простой способ отфильтровать только трафик эмулятора, поскольку он исходит с того же IP-адреса src.

Возможно, лучшим способом было бы создать очень простую среду VMware и запускать только там эмулятор, по крайней мере, так не было бы слишком большого фонового трафика.

Bitdivision
источник
Хорошее предложение, но сложно запустить эмулятор поверх виртуальной машины. Вы заставили это работать?
MikeSchem
С какими проблемами вы столкнулись? Сам я этого не делал, но не могу представить, что будут какие-то проблемы.
Bitdivision
В моем случае отправляемые запросы были выделены зеленым цветом, все, что я сделал, это закрыл другие браузеры и смог заметить сладкие зеленые строки. Как только вы обнаружите запрос, скопируйте адрес назначения, и вы сможете использовать его в фильтре, поместив ip.dst == «ip-адрес, который вы скопировали» и увидим только соответствующие запросы.
Ритвеак
4

Вы можете использовать Fiddler для отслеживания http-трафика:

http://aurir.wordpress.com/2010/03/22/tutorial-getting-android-emulator-working-with-fiddler-http-proxy-tool/

Вы также можете использовать Fiddler2 здесь .

Ларами
источник
2
Еще одна ссылка здесь . Я бы добавил, что прокси-сервер должен быть 10.0.2.2IP-адресом хост-машины в эмуляторах Android, не нужно выяснять, что это такое.
Mendhak
4

Теперь можно использовать Wireshark напрямую для захвата трафика эмулятора Android. Есть плагин extcap под названием androiddump, который делает это возможным. У вас должен быть tcpdumpисполняемый файл в образе системы, работающий на эмуляторе (он есть в большинстве последних образов, протестирован с образами API 24 и API 27) и adbdработающий от имени пользователя root на хосте (просто запустите adb root). В списке доступных интерфейсов в Wireshark (только версия Qt, устаревший GTK + его нет) или в списке, показанном с помощью, tshark -Dдолжно быть несколько интерфейсов Android, позволяющих прослушивать трафик Bluetooth, Logcat или Wifi, например:

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

Проф. Мориарти
источник
2

Вы можете использовать http://docs.mitmproxy.org/en/stable/install.html

Его легко настроить и не потребуется никаких дополнительных настроек.

Я пробовал разные инструменты, но оказалось, что это действительно хорошо и легко.

Дхирадж Химани
источник
Не знаю mitmproxyраньше. Но, насколько я понимаю, он специфичен для HTTP. Но вопрос ОП - нет.
Сиу Чинг Понг - Асука Кенджи -
1
Новая Android Studio 3.0 предоставляет профилировщик, вы можете его использовать. А для mitm он предоставляет все виды протоколов, http, https и т. Д. Вам просто нужно правильно настроить прокси.
Dhiraj Himani
Доступен ли захват пакетов из приложений, разработанных не мной? А на стороннем эмуляторе, таком как Nox App Player? Спасибо!
Сиу Чинг Понг - Асука Кенджи -
1
Да, на вашем эмуляторе / устройстве должен быть установлен сертификат mitm, который предоставляется самим mitm, и вы можете использовать его для просмотра текущего запроса и соответствующих ответов.
Dhiraj Himani
2

Вы можете отслеживать сетевой трафик из Android Studio. Перейдите в Android Monitor и откройте вкладку Network.

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

ОБНОВЛЕНИЕ: ⚠️ Android Device Monitor устарел в Android Studio 3.1. Подробнее см. Https://developer.android.com/studio/profile/monitor.

Fivos
источник
5
Можете ли вы сказать, где открыть вкладку подробного использования сети в Android Studio 1.5 (Windows), как показано на изображении в ссылке, я получаю только график, но не детали?
Shreyans jain
Имейте в виду, что этот вариант дает ограниченное представление. Я не мог решить свои проблемы, когда я хотел узнать, почему запрос был отклонен, потому что Android ничего не сказал мне об этом запросе. Fiddler здесь больше подходит.
Highriser
2

Я бы посоветовал вам использовать Wireshark .

шаги:

  1. Установите Wireshark.
  2. Выберите сетевое соединение, которое вы используете для звонков (например, выберите Wi-Fi, если вы его используете)
  3. Будет много запросов и ответов, закройте лишние заявки.
  4. Обычно запросы окрашены в зеленый цвет, как только вы заметили свой запрос, скопируйте адрес назначения и используйте фильтр сверху, введя ip.dst==52.187.182.185адрес назначения.

Вы можете использовать другие упомянутые здесь методы фильтрации, чтобы получить определенный трафик.

Ritveak
источник