如何在 android 上做一个 http 窃听器或代理应用程序

How to Do a http eavesdropper or proxy app on android

用例是:

我该如何实现?

我会说说我的尝试:

现在,如果使用 ("0.0.0.0", 0) 调用 addRoute,我可以拦截流量并查看数据包内容。但是我无法在不创建 udp 隧道的情况下路由数据包到我不想做的外部服务器。

如果使用 Wifi 路由器 IP 调用 addRoute,则所有生成的数据包都会自动进行路由。但是我无法拦截与虚拟接口关联的文件描述符上的数据包。它根本没有在 read() 调用中收到任何数据。

我想做的是:

我会建议 1) 设置一个代理2) 运行 一个应用作为一个 。这两者的组合不需要root权限。

设置代理

第一点可能是最棘手的一点。设置软件级代理(无需 root)的唯一方法是导航至 Wi-Fi 连接设置并手动设置代理。但是,有一个开源应用程序最终可以绕过此特定步骤:ProxySettings.

拦截流量

在我看来,最好的选择是使用 SandroProxy,它是 Android 的开源代理应用程序。它写得非常好,目前正在维护和支持,并且允许您拦截 HTTP 流量甚至修改它。可以找到代码 here, while the example application can be found here.


此解决方案应满足您的所有要求:

  1. 拦截流量(甚至编辑它):由于代理设置,所有网络流量都通过代理地址,这对应于您的应用程序
  2. 编辑是可选的:一切都会继续工作,因为没有设置代理
  3. 一切都是本地的:不需要外部服务器,您的代理就是已安装的应用程序
  4. 不需要root