Емулятор Android: як відстежувати мережевий трафік?


Відповіді:


104

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

  1. Скопіюйте та запустіть бінарний tcpdump, сумісний з ARM, на емуляторі, записавши висновок на SD-карту, можливо (наприклад tcpdump -s0 -w /sdcard/emulator.cap).

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

В обох випадках ви можете проаналізувати файл pcap за допомогою tcpdump або Wireshark як звичайного.


Так це не в режимі реального часу / онлайн? Я маю на увазі, пакети можна аналізувати лише в кінці?
fikr4n

У першому випадку ви можете проаналізувати за допомогою stdout на пристрої, а не записувати у файл. У другому випадку ви зможете передати / передати файл файлу так, як він написаний. Або ви можете захоплювати мережевий трафік на хост-машині, а не на емуляторі.
Крістофер Орр

Я знайшов емулятори, які я вже використовую, інстальовано tcpdump, і команда №1 працює без її встановлення. Ви також можете запустити його за допомогою "adb -e оболонки tcpdump -s0 -w /sdcard/emulator.cap".
Лесь

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

20

Можна також використовувати http-проксі для контролю http-запитів від емулятора. Ви можете передавати -http-proxyпрапор під час запуску нового емулятора, щоб встановити проксі (Приклад відрижки ) для контролю трафіку 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-специфічно. Але питання ОП - не.
Siu Ching Pong -Asuka Kenji-

Чарльз також існує для Linux, у мене він встановлений на моїй Ubuntu 18.04
Marecky

6

Поточний випуск Android Studio неправильно застосував -tcpdumpаргумент. Я все ще зміг захопити дамп, передавши відповідний параметр qemu наступним чином:

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

5

Так, спрацює провід.

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

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


Гарна пропозиція, але важко отримати емулятор, що працює над VM. Ви змусили це працювати?
MikeSchem

З якими питаннями ви стикалися? Я цього не робив сам, але не можу уявити, що виникнуть проблеми.
Bitdivision

У моєму випадку запити, що надсилаються, були зеленим кольором, все, що я робив, було закрито інші браузери, і я міг помітити солодкі зелені рядки. Як тільки ви помітите запит, скопіюйте адресу призначення, а потім можете використовувати його у фільтрі, поставивши ip.dst == "ip-адресу, яку скопіювали" та побачивши лише відповідні запити.
Ritveak

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, не потрібно з'ясовувати, що це таке.
Мендак

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-специфічно. Але питання ОП - не.
Siu Ching Pong -Asuka Kenji-

1
Нова Android Studio 3.0 надає профілер, цим ви можете скористатися. А для mitm він пропонує всі види протоколів, http, https тощо. Вам просто потрібно правильно налаштувати проксі.
Dhiraj Himani

Чи доступні для захоплення пакети з не розроблених мною додатків? А на сторонньому емуляторі, такому як Nox App Player? Дякую!
Сіу Чінг Понг -Asuka Kenji-

1
Так, у вас повинен бути встановлений сертифікат mitm на вашому емуляторі / пристрої, який надається самим mitm, і ви можете використовувати його для перегляду поточного запиту та відповідних відповідей.
Dhiraj Himani

2

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

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

ОНОВЛЕННЯ: Monitor Монітор пристроїв Android припинено в Android Studio 3.1. Детальніше дивіться на https://developer.android.com/studio/profile/monitor


5
ви можете сказати, звідки відкрити детальну вкладку використання мережі в android studio 1.5 (windows), як показано на зображенні у посиланні, я отримую лише графік, але не деталі?
Шреяни, травень

Майте на увазі, що цей варіант дає обмежене уявлення. Я не міг вирішити свої проблеми там, де хочу дізнатися, чому запит відхилено, оскільки 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.