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


Answers:


104

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

  1. 复制并在仿真器上运行ARM兼容的tcpdump二进制文件,也许将输出写入SD卡(例如tcpdump -s0 -w /sdcard/emulator.cap)。

  2. 运行emulator -tcpdump emulator.cap -avd my_avd以将所有仿真器的流量写入PC上的本地文件

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


因此,它不是实时/在线的吗?我的意思是,只能在最后分析数据包?
fikr4n

在第一种情况下,您可以通过设备上的stdout进行分析,而不是写入文件。在第二种情况下,您可能能够在写入文件时流式传输/压缩文件。或者,您可以在主机而不是模拟器上捕获网络流量。
克里斯托弗·奥尔

我发现我已经使用的仿真器现在已经安装了tcpdump,并且命令#1无需安装就可以运行。您也可以使用“ adb -e shell tcpdump -s0 -w /sdcard/emulator.cap”运行它。
莱斯

2
如果您使用的是第二种解决方案,并且收到The -tcpdump flag is not supported in QEMU2 yet and will be ignored.警告,请在命令中添加-engine classic,如下所示:emulator -tcpdump emulator.cap -avd my_avd -engine classic。这将强制使用不建议使用的仿真器引擎,但应在解决问题之前起作用。
lagoman

位置在哪里avd
user3806649

20

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


2
那么https流量呢
pee2pee


6

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

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

5

是的,wireshark可以工作。

我认为没有任何简单的方法可以只过滤仿真器流量,因为它来自相同的src IP。

也许最好的方法是设置一个非常裸露的VMware环境,并仅在其中运行仿真器,至少这样,不会有太多的后台流量。


很好的建议,但是很难在VM上运行仿真器。你有这个工作吗?
MikeSchem

您遇到什么问题?我自己没有做过,但是我无法想象会有任何问题。
Bitdivision '16

以我为例,发送的请求是绿色的,我所做的只是关闭了其他浏览器,并且能够发现绿色的行。发现请求后,复制目标地址,然后您就可以通过将ip.dst ==“您复制的IP地址”并仅查看相关请求,在过滤器中使用它。
里特韦克


4

现在可以直接使用Wireshark捕获Android仿真器流量。有一个名为androiddumpextcap插件,使之成为可能。您需要在模拟器上运行的系统映像中拥有一个可执行文件(大多数最新映像都具有该可执行文件,并已通过API 24和API 27映像进行了测试),并且在主机上以root用户身份运行(只需运行)。在Wireshark(仅Qt版本,不推荐使用的GTK +没有此接口)的可用接口列表中,或者显示的列表中应该有几个Android接口,可以监听蓝牙,Logcat或Wifi流量,例如:tcpdumpadbdadb roottshark -D

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



2

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

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

我经历了各种工具,但发现它确实非常好用。


mitmproxy以前不知道 但据我所知,它是特定于HTTP的。但是,OP的问题不是。
小清庞-明日香贤治

1
新的Android Studio 3.0提供了事件探查器,您可以使用它。对于mitm,它提供了各种协议,http,https等。您只需要正确配置代理即可。
Dhiraj Himani '17

是否可以从非我开发的应用程序中捕获数据包?并且在Nox App Player等第三方仿真器上?谢谢!
小清蓬-明日香贤治

1
是的,您应该在模拟器/设备上安装mitm证书,该证书由mitm本身提供,您可以使用它来查看正在进行的请求和相应的响应。
Dhiraj Himani '17

2

您可以从Android Studio监控网络流量。转到Android监视器,然后打开“网络”标签。

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

更新: ⚠️Android设备监视器已在Android Studio 3.1中弃用。在https://developer.android.com/studio/profile/monitor中查看更多


5
您能从哪里知道在android studio 1.5(windows)中打开详细网络使用选项卡的情况,如链接中的图像所示,我只能得到一张图,而没有详细信息?
Shreyans jain

请注意,此选项提供的见解有限。我无法解决我想找出拒绝请求原因的问题,因为Android并未告诉我有关此请求的任何信息。小提琴手在这里更合适。
Highriser

2

我建议您使用Wireshark

脚步:

  1. 安装Wireshark。
  2. 选择用于呼叫的网络连接(例如,如果使用Wifi,则选择Wifi)
  3. 将有许多请求和响应,关闭额外的应用程序。
  4. 通常,请求是绿色的,一旦发现请求,请复制目标地址,并ip.dst==52.187.182.185通过放置目标地址进行键入,在顶部使用过滤器。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.