ฉันจะตรวจสอบปริมาณการใช้งานเครือข่ายที่ส่งและรับจากโปรแกรมจำลอง Android ของฉันได้อย่างไร
ฉันจะตรวจสอบปริมาณการใช้งานเครือข่ายที่ส่งและรับจากโปรแกรมจำลอง Android ของฉันได้อย่างไร
คำตอบ:
มีสองวิธีในการจับการรับส่งข้อมูลเครือข่ายโดยตรงจากโปรแกรมจำลอง Android:
คัดลอกและเรียกใช้ไบนารี tcpdump ที่เข้ากันได้กับ ARMบนอีมูเลเตอร์เขียนเอาต์พุตไปยังการ์ด SD บางที (เช่นtcpdump -s0 -w /sdcard/emulator.cap
)
เรียกใช้emulator -tcpdump emulator.cap -avd my_avd
เพื่อเขียนทราฟฟิกของอีมูเลเตอร์ทั้งหมดไปยังไฟล์ในเครื่องบนพีซีของคุณ
ในทั้งสองกรณีคุณสามารถวิเคราะห์ไฟล์ pcap ด้วย tcpdump หรือ Wireshark ได้ตามปกติ
The -tcpdump flag is not supported in QEMU2 yet and will be ignored.
การแจ้งเตือนให้เพิ่ม-engine คลาสสิกemulator -tcpdump emulator.cap -avd my_avd -engine classic
กับคำสั่งของคุณเช่นนี้: สิ่งนี้จะบังคับให้เอ็นจินอีมูเลเตอร์เลิกใช้งาน แต่ควรใช้งานได้จนกว่าจะแก้ไขปัญหาได้
avd
ตั้ง?
นอกจากนี้ยังสามารถใช้พร็อกซี http เพื่อตรวจสอบคำขอ http จากโปรแกรมจำลอง คุณสามารถส่งผ่าน-http-proxy
ค่าสถานะเมื่อเริ่มโปรแกรมจำลองใหม่เพื่อตั้งค่าพร็อกซี (ตัวอย่างเรอ ) เพื่อตรวจสอบปริมาณการใช้งาน Android ./emulator -http-proxy localhost:8080 -avd android2.2
ตัวอย่างการใช้งาน โปรดสังเกตว่าในตัวอย่างของฉันฉันใช้เรอและมันจะฟังพอร์ต 8080 ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่
สำหรับ OS X คุณสามารถใช้Charlesมันง่ายและใช้งานง่าย
สำหรับข้อมูลเพิ่มเติมโปรดดูที่บล็อกโพสต์ของAndroid Emulator และ Charles Proxy
Charles
มาก่อนเลย แต่เท่าที่ฉันเห็นมันเป็นเฉพาะ HTTP แต่คำถามของ OP ไม่ใช่
Android Studio รุ่นปัจจุบันใช้-tcpdump
อาร์กิวเมนต์ไม่ถูกต้อง ฉันยังสามารถจับดัมพ์ได้โดยส่งผ่านพารามิเตอร์ที่เกี่ยวข้องไปยัง qemu ดังนี้:
tools/emulator -engine classic -tcpdump dump.cap -avd myAvd
ใช่ Wirehark จะใช้งานได้
ฉันไม่คิดว่าจะมีวิธีง่ายๆในการกรองทราฟฟิกของอีมูเลเตอร์เพียงอย่างเดียวเนื่องจากมันมาจาก src IP เดียวกัน
บางทีวิธีที่ดีที่สุดคือการตั้งค่าสภาพแวดล้อม VMware ที่เปลือยเปล่าและเรียกใช้โปรแกรมจำลองในนั้นเท่านั้นอย่างน้อยวิธีนั้นก็จะไม่มีการรับส่งข้อมูลพื้นหลังมากเกินไป
ขณะนี้สามารถใช้ Wireshark โดยตรงเพื่อจับภาพการรับส่งข้อมูลโปรแกรมจำลอง Android มีปลั๊กอินextcap ที่เรียกว่าandroiddumpซึ่งทำให้เป็นไปได้ คุณต้องมีtcpdump
ไฟล์ปฏิบัติการในอิมเมจระบบที่รันบนอีมูเลเตอร์ (อิมเมจปัจจุบันส่วนใหญ่มีมันทดสอบด้วยอิมเมจ API 24 และ API 27) และadbd
รันเป็นรูทบนโฮสต์ (แค่รันadb root
) ในรายการอินเทอร์เฟซที่มีให้ใช้งานใน Wireshark (เฉพาะรุ่น Qt GTK + ที่เลิกใช้แล้วไม่มี) หรือรายการที่แสดงพร้อมกับtshark -D
อินเทอร์เฟซ Android หลายตัวที่อนุญาตให้ดมกลิ่นบลูทู ธ Logcat หรือการรับส่งข้อมูล Wifi เช่น:
android-wifi-tcpdump-emulator-5554 (Android WiFi Android_SDK_built_for_x86 emulator-5554)
-avd Adfmf -http-proxy http://SYSTEM_IP:PORT
คุณสามารถเริ่มต้นจำลองที่มีคำสั่ง ฉันใช้ HTTP Analyzer แต่ควรใช้กับอย่างอื่น สามารถดูรายละเอียดเพิ่มเติมได้ที่นี่:
http://stick2code.blogspot.in/2014/04/intercept-http-requests-sent-from-app.html
คุณสามารถใช้ http://docs.mitmproxy.org/en/stable/install.html
ติดตั้งง่ายและไม่ต้องปรับแต่งใด ๆ เพิ่มเติม
ฉันใช้เครื่องมือต่าง ๆ แต่พบว่ามันดีและง่ายมาก
mitmproxy
มาก่อนเลย แต่เท่าที่ฉันเห็นมันเป็นเฉพาะ HTTP แต่คำถามของ OP ไม่ใช่
คุณสามารถตรวจสอบปริมาณการใช้งานเครือข่ายจาก Android Studio ไปที่ Android Monitor และเปิดแท็บ Network
http://developer.android.com/tools/debugging/ddms.html
อัปเดต: ⚠️การตรวจสอบอุปกรณ์ Android เลิกใช้งานแล้วใน Android Studio 3.1 ดูเพิ่มเติมในhttps://developer.android.com/studio/profile/monitor
ขั้นตอน:
- ติดตั้ง Wireshark
- เลือกการเชื่อมต่อเครือข่ายที่คุณใช้สำหรับการโทร (เช่นเลือก Wifi หากคุณกำลังใช้งาน)
- จะมีคำขอและการตอบกลับมากมายปิดแอปพลิเคชันเสริม
- โดยปกติคำขอจะเป็นสีเขียวเมื่อคุณพบคำขอของคุณแล้วให้คัดลอกที่อยู่ปลายทางและใช้ตัวกรองด้านบนโดยพิมพ์
ip.dst==52.187.182.185
โดยใส่ที่อยู่ปลายทาง
คุณสามารถใช้เทคนิคการกรองอื่น ๆ ที่กล่าวถึงที่นี่เพื่อรับการเข้าชมที่เจาะจงได้