在Android手机中监控网络活动

66

我希望能够监控我的安卓手机的网络流量。我正在考虑使用适用于安卓的tcpdump,但我不确定是否需要为手机交叉编译。

另外一个问题是,如果我想监控某个应用程序的流量数据,有没有相应的命令来实现?


1
Shark已不再维护,并且无法在新版本的Android上运行。您现在使用哪种方法? - Arya
@Arya,请尝试使用此应用程序 https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture - Mateus Gondim
@MateusGondim 谢谢你的回复。你知道我可以用什么来进行TLS加密吗? - Arya
11个回答

24

TCPDUMP 是我最喜欢的用于分析网络的工具之一,但如果你发现在android上交叉编译tcpdump困难,我建议你使用市场上的应用程序。

这些是我提到的应用程序:

  • Shark: 是Wireshark的Android手机小版本。该程序将创建 *.pcap 文件,并且您可以在PC上使用Wireshark读取该文件。
  • Shark Reader:此程序允许您直接在Android手机上读取 *.pcap 文件。

Shark 应用程序仅适用于已root的设备,因此如果您要安装它,请确保您的设备已经被root。

祝你好运 ;)


16
请提供下载建议工具的直接链接。 - Nabi K.A.Z.
1
什么是“Shark”?在网络上搜索“Android Shark”只会返回一堆海洋主题的手机游戏。 - jayhendren

17

如果您是在模拟器上进行操作,可以按照以下方式执行:

运行emulator -tcpdump emulator.cap -avd my_avd将所有模拟器的流量写入到PC上的本地文件中,然后在wireshark中打开它。

这里有一篇类似的帖子可能会有所帮助HERE


7
注意:tcpdump需要root权限,因此如果尚未完成,您将不得不root您的手机。这是一个ARM 二进制的tcpdump(适用于我的Samsung Captivate)。如果您更喜欢构建自己的二进制文件,请参考此处的说明(是的,您可能需要交叉编译)。
另外,请查看Shark For Root(基于tcpdump的Android数据包捕获工具)。
我不认为tcpdump可以通过特定的进程ID监视流量。Chris Stratton提到的strace 方法似乎比它值得的努力更多。更简单的方法是监视目标进程使用的特定IP和端口。如果不知道该信息,请在进程活动期间捕获所有流量,然后使用Wireshark筛选结果的pcap文件。

4
对于没有Root权限的Android手机:您可以使用此应用程序 tPacketCapture。启用捕捉功能后,此应用程序将为您的设备捕捉网络流量。有关在不Root设备的情况下进行网络嗅探的详细信息,请查看 此链接
一旦您拥有了以.pcap格式保存的文件,您可以使用任何流量分析器(如Wireshark)来分析其流量。
另外,有关在Wireshark上捕捉移动电话流量的更多想法,请参见此帖子:Capturing mobile phone traffic on wireshark

3

2

数据包捕获是在安卓上跟踪网络数据的最佳工具。不需要任何根权限,易于基于应用程序阅读和保存通话记录。请查看此链接


2

2

没有root权限,你可以使用调试代理工具,例如Charlesproxy&Co。


1
没错,我很长时间以来都在使用Charlesproxy,这个工具真的很棒。它提供了限速和SSL解密(通过使用自定义密钥)。但如果这个工具能作为Android Studio的一部分,那将更加完美。 - Alexander Skvortsov

2
你需要对手机进行root,然后交叉编译tcpdump或使用别人已经编译好的版本。
如果你使用模拟器,可能会更容易进行这些实验,在这种情况下,你可以从主机PC上进行监视。如果你必须使用真实设备,另一个选择是将其放在运行tcpdump的Linux框的二级接口所挂的wifi网络上。
我不知道如何按特定进程进行过滤。在快速搜索中,我找到的一个建议是使用strace替代系统上的tcpdump来监控该进程。

2
前提条件:您的计算机已安装adb和wireshark,并且您拥有一个已root的Android设备。
  1. 下载tcpdump到~/Downloads
  2. adb push ~/Downloads/tcpdump /sdcard/
  3. adb shell
  4. su root
  5. mv /sdcard/tcpdump /data/local/
  6. cd /data/local/
  7. chmod +x tcpdump
  8. ./tcpdump -vv -i any -s 0 -w /sdcard/dump.pcap
  9. 一旦捕获足够的数据,请按Ctrl+C停止。
  10. exit
  11. exit
  12. adb pull /sdcard/dump.pcap ~/Downloads/
现在,您可以使用Wireshark打开pcap文件。
至于您关于监视特定进程的问题,请找到您的应用程序的包ID,我们称其为com.android.myapp
  1. ps | grep com.android.myapp
  2. 复制您从输出中看到的第一个数字。我们称之为1234。如果没有输出,您需要启动应用程序。如果您仍然无法通过ps看到应用程序,请尝试使用top
  3. 下载strace到~/Downloads并以与上面tcpdump相同的方式将其放入/data/local
  4. cd /data/local
  5. ./strace -p 1234 -f -e trace=network -o /sdcard/strace.txt

现在您可以查看strace.txt以获取IP地址,并过滤您的wireshark日志以查找这些IP地址。


注意:在某些手机上,您需要执行 adb root 而不是 adb shell su root - AtomicBoolean
请注意,如果您的手机已经使用了 adb root,则必须执行 adb push ~/Downloads/tcpdump /data/local - AtomicBoolean

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