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

Posted

技术标签:

【中文标题】Android模拟器:如何监控网络流量?【英文标题】:Android emulator: How to monitor network traffic? 【发布时间】:2011-01-28 01:52:28 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

    在模拟器上复制并运行ARM-compatible tcpdump binary,可能会将输出写入 SD 卡(例如tcpdump -s0 -w /sdcard/emulator.cap)。

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

在这两种情况下,您都可以正常使用 tcpdump 或 Wireshark 分析 pcap 文件。

【讨论】:

所以不是实时/在线?我的意思是,数据包只能在最后进行分析? 在第一种情况下,您可以通过设备上的标准输出进行分析,而不是写入文件。在第二种情况下,您可以在文件写入时对其进行流式传输/尾随。或者您可以在主机上捕获网络流量,而不是在模拟器上。 我发现我使用的模拟器现在已经安装了 tcpdump,并且命令 #1 无需安装即可工作。您也可以使用“adb -e shell tcpdump -s0 -w /sdcard/emulator.cap”运行它。 如果您使用第二种解决方案并且收到The -tcpdump flag is not supported in QEMU2 yet and will be ignored. 警告,请将 -engine classic 添加到您的命令中,如下所示:emulator -tcpdump emulator.cap -avd my_avd -engine classic。这将强制弃用模拟器引擎,但在他们解决问题之前应该可以工作。 关于 tcpdump 二进制文件的页面链接已损坏,现在从哪里获取二进制文件?【参考方案2】:

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

【讨论】:

https 流量呢 我使用了这种方法 - 这里有一个很好的链接,关于如何为 https 流量做到这一点anothernetsecblog.com/intercepting-traffic-on-android-9-0【参考方案3】:

对于 OS X,您可以使用Charles,它简单易用。

如需了解更多信息,请查看Android Emulator and Charles Proxy 博文。

【讨论】:

我以前不知道Charles。但据我所知,它是特定于 HTTP 的。但OP的问题不是。 Charles 也适用于 Linux,我已将它安装在我的 Ubuntu 18.04 上【参考方案4】:

是的,wireshark 可以。

我认为没有任何简单的方法可以单独过滤掉模拟器流量,因为它来自同一个 src IP。

也许最好的方法是建立一个非常裸露的 VMware 环境,只在其中运行模拟器,至少这样不会有太多的后台流量。

【讨论】:

好建议,但很难让模拟器在虚拟机上运行。你得到这个工作了吗? 您遇到了什么问题?我自己没有做过,但我无法想象会有任何问题。 在我的例子中,发送的请求是绿色的,我所做的只是关闭其他浏览器,我能够发现甜蜜的绿色行。发现请求后,复制目标地址,然后您可以通过输入 ip.dst == "您复制的 IP 地址" 并仅查看相关请求来在过滤器中使用它。【参考方案5】:

当前版本的 Android Studio 未正确应用 -tcpdump 参数。我仍然能够通过将相关参数传递给 qemu 来捕获转储,如下所示:

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

【讨论】:

【参考方案6】:

现在可以直接使用 Wireshark 来捕获 Android 模拟器流量。有一个名为 androiddumpextcap 插件可以实现。您需要在模拟器上运行的系统映像中有一个 tcpdump 可执行文件(大多数当前映像都有它,使用 API 24 和 API 27 映像进行测试)和 adbd 在主机上以 root 身份运行(只需运行 adb root) .在 Wireshark 的可用接口列表(仅限 Qt 版本,已弃用的 GTK+ 没有)或tshark -D 显示的列表中,应该有几个 Android 接口允许嗅探蓝牙、Logcat 或 Wifi 流量,例如:

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

【讨论】:

我在 Windows 10 上,使用 AVD 模拟器。如何安装插件?怎么知道模拟器有没有tcpdump?【参考方案7】:

您可以使用Fiddler监控http流量:

http://aurir.wordpress.com/2010/03/22/tutorial-getting-android-emulator-working-with-fiddler-http-proxy-tool/

您也可以使用 Fiddler2 here。

【讨论】:

另一个链接here。我要补充一点,代理服务器应该是10.0.2.2,这是Android模拟器中主机的IP地址,不需要找出它是什么。【参考方案8】:

您可以从 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中查看更多信息

【讨论】:

你能告诉我从哪里打开android studio 1.5(windows)中的详细网络使用选项卡,如链接中的图片所示,我只得到一个图表而不是细节? 请注意,此选项提供的洞察力有限。我无法解决我想找出请求被拒绝的原因的问题,因为 Android 没有告诉我有关此请求的任何信息。 Fiddler 更适合这里。【参考方案9】:

我建议你使用Wireshark。

步骤:

    安装 Wireshark。 选择您用于通话的网络连接(例如,如果您正在使用,请选择 Wifi) 会有很多请求和响应,关闭额外的应用程序。 通常请求是绿色的,一旦你发现你的请求,复制目标地址并使用顶部的过滤器 通过输入目标地址输入ip.dst==52.187.182.185

您可以利用here 提到的其他过滤技术来获取特定流量。

【讨论】:

【参考方案10】:

您可以使用命令-avd Adfmf -http-proxy http://SYSTEM_IP:PORT 启动模拟器。 我使用了 HTTP Analyzer,但它应该适用于其他任何东西。更多详情可在这找到: http://stick2code.blogspot.in/2014/04/intercept-http-requests-sent-from-app.html

【讨论】:

您的链接已失效【参考方案11】:

你可以使用 http://docs.mitmproxy.org/en/stable/install.html

它易于设置,不需要任何额外的调整。

我使用了各种工具,但发现它非常好用且简单。

【讨论】:

我以前不知道mitmproxy。但据我所知,它是特定于 HTTP 的。但OP的问题不是。 新的 Android Studio 3.0 提供了 profiler,你可以使用它。而对于 mitm 它提供了各种协议,http、https 等。您只需要正确配置代理即可。 是否可以从非我开发的应用程序中捕获数据包?在 Nox App Player 等第 3 方模拟器上?谢谢! 是的,你应该在你的模拟器/设备上安装了mitm证书,它是由mitm自己提供的,你可以用它来观察正在进行的请求和相应的响应。

以上是关于Android模拟器:如何监控网络流量?的主要内容,如果未能解决你的问题,请参考以下文章

如何安装网络流量监控工具vnStat和vnStati

如何监控局域网实时流量?

网络流量监控原理是啥?

网络分流器-IDC如何监控?流量如何采集?

如何管理局域网上网带宽?网络监控上网流量?

监控 Android 手机中的网络活动