Jak mogę monitorować ruch sieciowy wysyłany i odbierany z mojego emulatora Androida?
Jak mogę monitorować ruch sieciowy wysyłany i odbierany z mojego emulatora Androida?
Odpowiedzi:
Istnieją dwa sposoby przechwytywania ruchu sieciowego bezpośrednio z emulatora Androida:
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
.).
Uruchom, emulator -tcpdump emulator.cap -avd my_avd
aby zapisać cały ruch emulatora do pliku lokalnego na komputerze
W obu przypadkach możesz normalnie przeanalizować plik pcap za pomocą tcpdump lub Wireshark.
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.
avd
znajduje?
Możliwe jest również użycie proxy http do monitorowania żądań http z emulatora. Możesz przekazać -http-proxy
flagę 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 .
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 .
Charles
wcześniej. Ale o ile widzę, jest to specyficzne dla HTTP. Ale pytanie OP nie jest.
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.
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ć tcpdump
plik 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 adbd
dział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 -D
powinno 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)
Możesz uruchomić emulator poleceniem -avd Adfmf -http-proxy http://SYSTEM_IP:PORT
. Użyłem analizatora HTTP, ale powinno działać w czymkolwiek innym. Więcej szczegółów można znaleźć tutaj:
http://stick2code.blogspot.in/2014/04/intercept-http-requests-sent-from-app.html
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.
mitmproxy
wcześniej. Ale o ile widzę, jest to specyficzne dla HTTP. Ale pytanie OP nie jest.
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
Sugerowałbym użycie Wireshark .
Kroki:
- Zainstaluj Wireshark.
- Wybierz połączenie sieciowe, którego używasz do połączeń (na przykład wybierz Wi-Fi, jeśli go używasz)
- Będzie wiele próśb i odpowiedzi, zamknij dodatkowe aplikacje.
- 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.185
adres docelowy.
Aby uzyskać określony ruch, możesz skorzystać z innych wymienionych tutaj technik filtrowania .