Emulator Android: Bagaimana cara memantau lalu lintas jaringan?

Jawaban:

104

Ada dua cara untuk menangkap lalu lintas jaringan langsung dari emulator Android:

  1. Salin dan jalankan biner tcpdump yang kompatibel dengan ARM di emulator, tulis keluaran ke kartu SD, mungkin (misalnya tcpdump -s0 -w /sdcard/emulator.cap).

  2. Jalankan emulator -tcpdump emulator.cap -avd my_avduntuk menulis semua lalu lintas emulator ke file lokal di PC Anda

Dalam kedua kasus tersebut, Anda dapat menganalisis file pcap dengan tcpdump atau Wireshark seperti biasa.

Christopher Orr
sumber
Jadi bukan real-time / online? Maksud saya, paket hanya dapat dianalisis di akhir?
fikr4n
Dalam kasus pertama, Anda dapat menganalisis melalui stdout di perangkat daripada menulis ke file. Dalam kasus kedua, Anda mungkin dapat melakukan streaming / tail file seperti yang tertulis. Atau Anda dapat merekam lalu lintas jaringan di mesin host, bukan di emulator.
Christopher Orr
Saya telah menemukan emulator yang saya gunakan sekarang sudah menginstal tcpdump, dan perintah # 1 berfungsi tanpa menginstalnya. Anda juga dapat menjalankannya dengan "adb -e shell tcpdump -s0 -w /sdcard/emulator.cap".
Les
2
Jika Anda menggunakan solusi 2 dan Anda mendapatkan The -tcpdump flag is not supported in QEMU2 yet and will be ignored.peringatan, menambahkan -Engine klasik untuk perintah Anda seperti ini: emulator -tcpdump emulator.cap -avd my_avd -engine classic. Tindakan ini akan memaksa mesin emulator yang tidak digunakan lagi, tetapi akan berfungsi sampai masalah diperbaiki.
lagoman
dimana avdlokasinya?
pengguna3806649
20

Anda juga dapat menggunakan proxy http untuk memantau permintaan http dari emulator. Anda bisa meneruskan -http-proxyflag saat memulai emulator baru untuk menyetel proxy (Contoh burp ) untuk memantau traffic Android. Contoh penggunaan ./emulator -http-proxy localhost:8080 -avd android2.2. Perhatikan bahwa dalam contoh saya, saya menggunakan Burp, dan mendengarkan port 8080. Info lebih lanjut dapat ditemukan di sini .

Waltsu
sumber
2
Bagaimana dengan lalu lintas https
pee2pee
10

Untuk OS X Anda dapat menggunakan Charles , itu sederhana dan mudah digunakan.

Untuk informasi selengkapnya, lihat postingan blog Android Emulator dan Charles Proxy .

Tom Susel
sumber
1
Saya tidak tahu Charlessebelumnya. Tapi sejauh yang saya bisa lihat, ini khusus HTTP. Tapi pertanyaan OP bukan.
Siu Ching Pong -Asuka Kenji-
Charles juga ada untuk Linux, saya sudah menginstalnya di Ubuntu 18.04 saya
Marecky
6

Rilis Android Studio saat ini tidak menerapkan -tcpdumpargumen dengan benar . Saya masih bisa menangkap dump dengan meneruskan parameter terkait ke qemu sebagai berikut:

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

Ya, wireshark akan berfungsi.

Menurut saya tidak ada cara mudah untuk memfilter hanya lalu lintas emulator, karena ini berasal dari IP src yang sama.

Mungkin cara terbaik adalah mengatur lingkungan VMware yang sangat kosong dan hanya menjalankan emulator di sana, setidaknya dengan cara itu tidak akan ada terlalu banyak lalu lintas latar belakang.

Bitdivision
sumber
Saran yang bagus, tetapi sulit untuk menjalankan emulator di atas VM. Apakah Anda sudah membuat ini bekerja?
MikeSchem
Masalah apa yang pernah Anda hadapi? Saya belum melakukannya sendiri, tetapi saya tidak dapat membayangkan akan ada masalah apa pun.
Bitdivision
Dalam kasus saya, permintaan yang dikirim berwarna hijau, yang saya lakukan hanyalah menutup browser lain dan saya dapat melihat baris hijau yang manis. Setelah Anda melihat permintaan tersebut, salin alamat tujuan dan Anda dapat menggunakannya dalam filter dengan meletakkan ip.dst == "alamat ip yang Anda salin" dan hanya melihat permintaan yang relevan.
Ritveak
4

Sekarang Wireshark dapat digunakan secara langsung untuk menangkap lalu lintas emulator Android. Ada sebuah plugin extcap bernama androiddump yang memungkinkannya. Anda harus memiliki tcpdumpfile yang dapat dieksekusi di image sistem yang berjalan di emulator (gambar terbaru memilikinya, diuji dengan gambar API 24 dan API 27) dan adbddijalankan sebagai root pada host (jalankan saja adb root). Dalam daftar antarmuka yang tersedia di Wireshark (hanya versi Qt, GTK + yang tidak digunakan lagi tidak memilikinya) atau daftar yang ditampilkan tshark -Dharus ada beberapa antarmuka Android yang memungkinkan untuk mengendus lalu lintas Bluetooth, Logcat, atau Wifi, misalnya:

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

Prof. Moriarty
sumber
2

Anda dapat menggunakan http://docs.mitmproxy.org/en/stable/install.html

Ini mudah diatur dan tidak memerlukan penyesuaian tambahan.

Saya memeriksa berbagai alat tetapi ternyata alat itu sangat bagus dan mudah.

Dhiraj Himani
sumber
Saya tidak tahu mitmproxysebelumnya. Tapi sejauh yang saya bisa lihat, ini khusus HTTP. Tapi pertanyaan OP bukan.
Siu Ching Pong -Asuka Kenji-
1
Android Studio 3.0 baru menyediakan profiler, Anda bisa menggunakannya. Dan untuk mitm menyediakan semua jenis protokol, http, https dll. Anda hanya perlu mengkonfigurasi proxy dengan benar.
Dhiraj Himani
Apakah tersedia untuk menangkap paket dari aplikasi yang tidak saya kembangkan? Dan pada emulator pihak ke-3 seperti Nox App Player? Terima kasih!
Siu Ching Pong -Asuka Kenji-
1
Ya, Anda harus menginstal sertifikat mitm di emulator / perangkat Anda, yang disediakan oleh mitm itu sendiri, dan Anda dapat menggunakan ini untuk melihat permintaan yang sedang berlangsung dan respons yang sesuai.
Dhiraj Himani
2

Anda dapat memantau lalu lintas jaringan dari Android Studio. Buka Android Monitor dan buka tab Jaringan.

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

PEMBARUAN: ⚠️ Android Device Monitor tidak lagi digunakan di Android Studio 3.1. Lihat selengkapnya di https://developer.android.com/studio/profile/monitor

Fivos
sumber
5
dapatkah Anda tahu dari mana harus membuka tab penggunaan jaringan detail di android studio 1.5 (windows) seperti yang ditunjukkan pada gambar di tautan, saya hanya mendapatkan grafik tetapi tidak detail?
Shreyans jain
Ketahuilah bahwa opsi ini memberikan wawasan yang terbatas. Saya tidak dapat menyelesaikan masalah saya di mana saya ingin mencari tahu mengapa permintaan ditolak, karena Android tidak memberi tahu saya apa pun tentang permintaan ini. Fiddler lebih cocok di sini.
Highriser
2

Saya sarankan Anda menggunakan Wireshark .

Langkah:

  1. Pasang Wireshark.
  2. Pilih koneksi jaringan yang Anda gunakan untuk panggilan (misalnya, pilih Wifi jika Anda menggunakannya)
  3. Akan ada banyak permintaan dan tanggapan, tutup aplikasi tambahan.
  4. Biasanya permintaan berwarna hijau, setelah Anda melihat permintaan Anda, salin alamat tujuan dan gunakan filter di atas dengan mengetik ip.dst==52.187.182.185dengan memasukkan alamat tujuan.

Anda dapat menggunakan teknik pemfilteran lain yang disebutkan di sini untuk mendapatkan lalu lintas tertentu.

Ritveak
sumber