Emulator Androida: Jak monitorować ruch sieciowy?

Odpowiedzi:

104

Istnieją dwa sposoby przechwytywania ruchu sieciowego bezpośrednio z emulatora Androida:

  1. Skopiuj i uruchom plik binarny tcpdump zgodny z ARM na emulatorze, zapisując dane wyjściowe na karcie SD, być może (np tcpdump -s0 -w /sdcard/emulator.cap.).

  2. Uruchom, emulator -tcpdump emulator.cap -avd my_avdaby zapisać cały ruch emulatora do pliku lokalnego na komputerze

W obu przypadkach możesz normalnie przeanalizować plik pcap za pomocą tcpdump lub Wireshark.

Christopher Orr
źródło
Więc to nie jest w czasie rzeczywistym / online? Chodzi mi o to, że pakiety mogą być analizowane dopiero na końcu?
fikr4n
W pierwszym przypadku możesz analizować za pomocą standardowego wyjścia na urządzeniu, zamiast zapisywać do pliku. W drugim przypadku możesz przesyłać strumieniowo / modyfikować plik w takiej postaci, w jakiej został zapisany. Lub możesz przechwycić ruch sieciowy na maszynie hosta, a nie na emulatorze.
Christopher Orr,
Zauważyłem, że emulatory, których używam, mają już zainstalowany tcpdump, a polecenie nr 1 działa bez jego instalowania. Możesz również uruchomić go za pomocą "adb -e shell tcpdump -s0 -w /sdcard/emulator.cap".
Les
2
Jeśli używasz 2nd rozwiązanie i dostajesz The -tcpdump flag is not supported in QEMU2 yet and will be ignored.ostrzeżenie, dodać -engine klasyczny do polecenia jak poniżej: emulator -tcpdump emulator.cap -avd my_avd -engine classic. Wymusi to przestarzały silnik emulatora, ale powinien działać do czasu rozwiązania problemu.
lagoman
gdzie się avdznajduje?
user3806649
20

Możliwe jest również użycie proxy http do monitorowania żądań http z emulatora. Możesz przekazać -http-proxyflagę podczas uruchamiania nowego emulatora, aby ustawić serwer proxy (przykładowe burp ) w celu monitorowania ruchu systemu Android. Przykładowe użycie ./emulator -http-proxy localhost:8080 -avd android2.2. Zauważ, że w moim przykładzie używam Burpa i nasłuchuje on portu 8080. Więcej informacji można znaleźć tutaj .

Waltsu
źródło
2
A co z ruchem https
pee2pee,
10

W przypadku OS X możesz użyć Charlesa , jest prosty i łatwy w użyciu.

Więcej informacji można znaleźć w poście na blogu Emulator Androida i Charles Proxy .

Tom Susel
źródło
1
Nie wiem Charleswcześniej. Ale o ile widzę, jest to specyficzne dla HTTP. Ale pytanie OP nie jest.
Siu Ching Pong -Asuka Kenji-
Charles istnieje również dla Linuksa, mam go zainstalowanego na moim Ubuntu 18.04
Marecky
6

Bieżąca wersja Android Studio nie zastosowała poprawnie tego -tcpdumpargumentu. Nadal mogłem przechwycić zrzut, przekazując odpowiedni parametr do qemu w następujący sposób:

tools/emulator -engine classic -tcpdump dump.cap -avd myAvd
Berbeć
źródło
5

Tak, wireshark będzie działał.

Nie sądzę, aby istniał łatwy sposób na odfiltrowanie ruchu wyłącznie z emulatora, ponieważ pochodzi on z tego samego adresu IP src.

Być może najlepszym sposobem byłoby skonfigurowanie bardzo nagiego środowiska VMware i uruchomienie tam tylko emulatora, przynajmniej w ten sposób nie byłoby zbyt dużego ruchu w tle.

Bitdivision
źródło
Dobra sugestia, ale trudno jest uruchomić emulator na maszynie wirtualnej. Czy to działa?
MikeSchem
Jakie problemy napotkaliście? Sam tego nie zrobiłem, ale nie wyobrażam sobie, żeby były jakieś problemy.
Bitdivision,
W moim przypadku wysyłane żądania były na zielono, wszystko, co robiłem, to zamykałem inne przeglądarki i byłem w stanie dostrzec słodkie zielone rzędy. Gdy znajdziesz żądanie, skopiuj adres docelowy, a następnie możesz go użyć w filtrze, umieszczając ip.dst == "adres IP, który został skopiowany" i wyświetlając tylko odpowiednie żądania.
Ritveak
4

Teraz można bezpośrednio używać Wireshark do przechwytywania ruchu emulatora Androida. Jest extcap plugin o nazwie androiddump co sprawia, że to możliwe. Musisz mieć tcpdumpplik wykonywalny w obrazie systemu działający na emulatorze (większość obecnych obrazów ma go, przetestowany z obrazami API 24 i API 27) i adbddziałający jako root na hoście (po prostu uruchom adb root). Na liście dostępnych interfejsów w Wireshark (tylko wersja Qt, przestarzała GTK + go nie ma) lub na liście pokazanej obok tshark -Dpowinno znajdować się kilka interfejsów Androida umożliwiających podsłuchiwanie ruchu Bluetooth, Logcat, czy Wi-Fi, np .:

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

Prof. Moriarty
źródło
2

Możesz użyć http://docs.mitmproxy.org/en/stable/install.html

Jest łatwy w konfiguracji i nie wymaga żadnych dodatkowych poprawek.

Korzystam z różnych narzędzi, ale okazało się, że jest to naprawdę dobre i łatwe.

Dhiraj Himani
źródło
Nie wiem mitmproxywcześniej. Ale o ile widzę, jest to specyficzne dla HTTP. Ale pytanie OP nie jest.
Siu Ching Pong -Asuka Kenji-
1
Nowy Android Studio 3.0 zapewnia profiler, możesz tego użyć. A dla MITM zapewnia wszelkiego rodzaju protokoły, http, https itp. Wystarczy poprawnie skonfigurować proxy.
Dhiraj Himani
Czy można przechwytywać pakiety z aplikacji, których nie opracowałem? A na emulatorze innej firmy, takim jak Nox App Player? Dzięki!
Siu Ching Pong -Asuka Kenji-
1
Tak, powinieneś mieć certyfikat MITM zainstalowany na emulatorze / urządzeniu, który jest dostarczany przez sam Mitm, i możesz go użyć do obserwowania trwającego żądania i odpowiadających mu odpowiedzi.
Dhiraj Himani
2

Możesz monitorować ruch sieciowy z Android Studio. Przejdź do Android Monitor i otwórz zakładkę Sieć.

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

AKTUALIZACJA: ⚠️ Android Device Monitor został wycofany w Android Studio 3.1. Zobacz więcej na https://developer.android.com/studio/profile/monitor

Fivos
źródło
5
czy możesz powiedzieć, skąd otworzyć kartę szczegółów użycia sieci w Android Studio 1.5 (Windows), jak pokazano na obrazku w linku, otrzymuję tylko wykres, ale nie szczegóły?
Shreyans jain
Należy pamiętać, że ta opcja zapewnia ograniczony wgląd. Nie mogłem rozwiązać swoich problemów, gdy chcę dowiedzieć się, dlaczego odrzucono żądanie, ponieważ Android nie powiedział mi nic o tym żądaniu. Fiddler jest tutaj bardziej odpowiedni.
Highriser,
2

Sugerowałbym użycie Wireshark .

Kroki:

  1. Zainstaluj Wireshark.
  2. Wybierz połączenie sieciowe, którego używasz do połączeń (na przykład wybierz Wi-Fi, jeśli go używasz)
  3. Będzie wiele próśb i odpowiedzi, zamknij dodatkowe aplikacje.
  4. Zwykle żądania są w kolorze zielonym, po znalezieniu żądania skopiuj adres docelowy i użyj filtru na górze, wpisując ip.dst==52.187.182.185adres docelowy.

Aby uzyskać określony ruch, możesz skorzystać z innych wymienionych tutaj technik filtrowania .

Ritveak
źródło