Эмулятор 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. Более подробную информацию можно найти здесь .


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 и запускать только там эмулятор, по крайней мере, так не было бы слишком большого фонового трафика.


Хорошее предложение, но сложно запустить эмулятор поверх виртуальной машины. Вы заставили это работать?
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.


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адрес назначения.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.