如何捕获特定安卓应用程序的网络流量。

13

我阅读了一篇关于如何捕获特定Android应用程序网络流量的论文。其中提到:“我们使用tcpdump来收集虚拟机中所有的网络流量。我们将strace实用程序移植到Android上,记录应用程序执行的每个网络系统调用。我们使用应用程序的进程ID(pid)识别所有启动的线程。基于这些线程信息,我们可以过滤出不是该应用程序发起的流量。” 但我仍然不知道它的操作原理。那么我该如何捕获特定Android应用程序的网络流量呢?谢谢回答。

1个回答

7
您也可以使用SandroProxy。它能够捕获不遵循Android OS代理设置的应用程序流量。还有一个选项是创建可用于SSL流量解密的pcap文件。一种选择是创建能够使用wireshark解密的SSL。

想法是拦截HTTP/HTTPS流量,作为正常代理或透明代理使用iptables来协助存储请求/响应或pcap文件,并将其转发到服务器。

如何确定谁在发送请求: 当您打开到代理的套接字时,必须从/proc/net/tcp或/proc/net/tcp6中匹配信息以获取进程UID。通过这样做,您可以获取软件包名称。可能会有多个。

您可以查看如何制作自定义代理并从以下来源构建自己的代理:

http://code.google.com/p/sandrop/source/browse/projects/SandroProxyPlugin/src/org/sandroproxy/plugin/gui/MainActivity.java

http://code.google.com/p/sandrop/source/browse/projects/SandroProxyPlugin/readme.txt

--- 由SandroProxy支持发送 ---


海报要求解释所使用的“机制”,而不是以不透明的方式使用商业软件包。 - Chris Stratton
1
这是一款免费应用程序。您还可以从源代码构建自定义实现。http://code.google.com/p/sandrop/。但如果您仍然觉得不合适,我可以删除回答。 - SandroProxy support
将链接指向源代码会更接近回答问题,而不是链接到完成的应用程序。但最好的方法是添加一个简短的机制说明。 - Chris Stratton
将会添加如何构建自定义的内容。 - SandroProxy support
这是一个进步,但如果您能解释一下它的工作原理会更好 - 就像问题解释另一个系统的工作原理一样。我们的想法是,即使跟随任何链接,我们也希望您的答案对所提出的问题有价值。例如,您如何知道来自哪个应用程序的流量(不是如何看到,而是您的程序如何找出)? - Chris Stratton
显示剩余2条评论

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