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.


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 .


2
A co z ruchem https
— pee2pee,


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

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.


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)



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.


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


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.