安卓模拟器:如何监控网络流量?

164

我该如何监控从我的Android模拟器发送和接收的网络流量?

13个回答

123

从Android模拟器中直接捕获网络流量有两种方法:

  1. 在模拟器上运行与ARM兼容的tcpdump二进制文件,将输出写入SD卡,例如:tcpdump -s0 -w /sdcard/emulator.cap

  2. 运行 emulator -tcpdump emulator.cap -avd my_avd 将所有模拟器的流量写入到PC上的本地文件中。

在这两种情况下,您可以像平常一样使用tcpdump或Wireshark来分析pcap文件。


1
那么它不是实时/在线的吗?我的意思是,数据包只能在最后进行分析? - fikr4n
在第一种情况下,您可以通过设备上的stdout进行分析,而不是写入文件。在第二种情况下,您可以在文件被写入时流式传输/尾随该文件。或者您可以在主机机器上捕获网络流量,而不是在模拟器上。 - Christopher Orr
2
如果您正在使用第二种解决方案并且收到“-tcpdump标志在QEMU2中尚不受支持,将被忽略。”警告,请在您的命令中添加**-engine classic**,例如:emulator -tcpdump emulator.cap -avd my_avd -engine classic。这将强制使用已弃用的模拟器引擎,但应该可以解决问题,直到他们修复此问题。 - Mladen
1
关于tcpdump二进制文件的页面链接已经失效,现在该从哪里获取此文件? - Adam Burley
使用管道解决方案实时分析Wireshark:https://wiki.wireshark.org/CaptureSetup/Pipes - Servus
显示剩余3条评论

22

您也可以使用http代理来监视模拟器中的http请求。在启动新的模拟器时,您可以传递-http-proxy标志来设置代理(例如burp)以监视Android流量。示例用法:./emulator -http-proxy localhost:8080 -avd android2.2。请注意,在我的示例中,我使用的是Burp,并且它正在监听端口8080。更多信息可以在这里找到。


4
关于 HTTPS 流量怎么样? - pee2pee

16

1
我之前不知道 Charles。但据我所见,它是针对HTTP的。但是OP的问题并不是这个。 - Siu Ching Pong -Asuka Kenji-
1
Charles也适用于Linux,我已经在我的Ubuntu 18.04上安装了它。 - Marecky

11
现在可以直接使用Wireshark来捕获Android模拟器的流量。有一个名为extcap的插件,名为androiddump,使这成为可能。您需要在模拟器上运行系统映像中的tcpdump可执行文件(大多数当前映像都有它,已测试API 24和API 27映像),并在主机上以root身份运行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)


1
我正在使用Windows 10操作系统,使用AVD模拟器。我该如何安装插件?我怎么知道模拟器是否有tcpdump? - Rony Tesler
这在 Arch 上的 wireshark-qt 4.0.5 中开箱即用。无需安装任何额外的内容。您需要一个“非 Google Play”映像,否则 adb root 将会拒绝。 - CaptainCrunch
@CaptainCrunch,有一种方法可以在“Google Play”模拟器上获得root访问权限。我强烈推荐使用这个脚本,它可以使整个过程变得无缝:https://github.com/newbit1/rootAVD - undefined

8

是的,Wireshark可以使用。

我认为没有简单的方法可以仅过滤出模拟器流量,因为它来自相同的源IP。

也许最好的方法是设置一个非常简洁的VMware环境,并且只在其中运行模拟器,这样至少就不会有太多的后台流量。


好的建议,但在虚拟机上运行模拟器很困难。你试过让它工作吗? - MikeSchem
你遇到了什么问题?我自己没有做过,但我想象不会有任何问题。 - Bitdivision
在我的情况下,发送的请求是绿色的,我所做的就是关闭其他浏览器,然后我就能够看到那些漂亮的绿色行了。 一旦你发现了请求,复制目标地址,然后可以使用它进行过滤,方法是输入 ip.dst == "你复制的 IP 地址",这样就只能看到相关的请求了。 - Ritveak

6

当前版本的Android Studio无法正确应用-tcpdump参数。但是,您仍可以通过将相关参数传递给qemu来捕获转储,方法如下:

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

6
我建议您使用Wireshark
步骤:
  1. 安装Wireshark。
  2. 选择您用于通话的网络连接(例如,如果您正在使用Wifi,则选择它)
  3. 会有许多请求和响应,请关闭额外的应用程序。
  4. 通常请求是绿色的,一旦您发现您的请求,请复制目标地址并在顶部使用过滤器,方法是输入ip.dst==52.187.182.185并放置目标地址。
您可以利用此处提到的其他过滤技术来获取特定的流量。

4

5
你能告诉我在Android Studio 1.5(Windows)中如何打开详细的网络使用选项卡吗?就像链接中的图片所示,我只能看到一个图表,但没有详细信息。 - Shreyans jain
请注意,此选项提供有限的洞察力。当我想找出为什么请求被拒绝时,Android 没有告诉我任何关于这个请求的信息,所以我无法解决我的问题。在这种情况下,Fiddler 更加合适。 - Highriser

4

2
另一个链接在这里:http://blogs.msdn.com/b/jpsanders/archive/2013/04/03/configuring-fiddler-to-be-a-proxy-for-android-emulators.aspx。我要补充的是,代理服务器应该是`10.0.2.2`,这是 Android 模拟器中主机机器的 IP 地址,无需查找它是什么。 - Mendhak

4
尽管 Android Studio 的“App Inspection”中的网络检测器菜单对于跟踪网络请求很有帮助,但我注意到它并不能跟踪所有请求。这是文档
我所知道和使用的跟踪Android模拟器网络请求的最简单方法是HTTP Toolkit。它非常快速,有一个漂亮的UI(类似于 Chrome Dev Tools 的 Networks 选项卡)用于跟踪请求。
只需安装它,点击"通过ADB连接的Android设备"选项,然后接受模拟器中显示的提示(文档)。

HTTP Toolkit UI


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接