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

标签 android http networking proxy

用例是:

  • Android 手机上的所有应用程序都将通过 wifi 连接到互联网。
  • 我想要一个应用程序来窃听来自所有应用程序的 http 流量,以便我可以找到他们访问的网站。
  • 此应用程序将作为 apk 分发,用户将在他们的手机上安装此应用程序。

我如何实现这一点?

我会说说我的尝试:

  • 使用自定义 Vpn 服务应用程序,其中的 Activity 会触发从 VpnService 派生的服务。
  • Custom VpnService 调用构建器并设置 Mtu、addRoute、addAddress,然后添加 DnsServer。
  • 然后服务从与生成器的 establish() 调用生成的接口(interface)关联的文件描述符中读取。

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

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

我想做的是:

  • 拦截流量以检查 http header
  • 与此同时,像普通 wifi 连接一样照常进行路由。
  • 让手机里的一切都自成一体。不应有外部服务器。
  • 此应用程序不需要任何生根等。它应该像普通应用程序一样安装。

最佳答案

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

设置代理

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

拦截流量

在我看来,最好的选择是使用 SandroProxy,它是一款适用于 Android 的开源代理应用程序。它写得非常好,目前正在维护和支持,并且允许您拦截 HTTP 流量甚至修改它。可以找到代码here , 而示例应用程序可以在 here 中找到.


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

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

关于android - 如何在 android 上做一个 http 窃听器或代理应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28365314/

相关文章:

Spring MVC注解 Controller 方法,无法进行DELETE操作的 "find"方法

c - 我是 C 网络的新手,我需要将字符串(字符数组)从命令行参数发送到服务器

python - Python 中的 ICMP pinger 应用程序 - 错误 : operation not permitted?

android - 方向改变使事物无效

android - 使用 rngd 后,[hwrng] 继续最大化熵

java - 由于React无法在Google Pixel 8.0中创建 Root View ,因此无法启动日志框

java - 我可以在 Android 中为 DefaultHttpClient 设置 getaddrinfo 超时吗?

Android Intent 过滤器不起作用

http - nginx 在 proxy_pass 之后删除内容长度 http header

json - 如何从可执行 bash 脚本中的 curl 获得正确响应?