首页 文章

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

提问于
浏览
2

用例是:

  • 安卓手机上的所有应用程序都将通过wifi连接到互联网 .

  • 我希望有一个应用程序窃听所有应用程序的http流量,以便我可以找到他们访问的网站 .

  • 此应用程序将作为apk分发,用户将在他们的手机上安装此应用程序 .

我该如何实现这一目标?

我会说出我的尝试:

  • 使用自定义Vpn服务应用程序,其中活动触发从VpnService派生的服务 .

  • Custom VpnService调用构建器并设置Mtu,addRoute,addAddress,然后添加addDnsServer .

  • 然后,服务从与构建器的establish()调用生成的接口关联的文件描述符中读取 .

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

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

我想做的是:

  • 拦截流量以检查http标头

  • 同时,像普通的wifi连接一样照常进行路由 .

  • 手机中包含所有内容 . 应该没有外部服务器 .

  • 此申请不应要求任何生根等 . 它应该安装普通应用程序的方式 .

1 回答

  • 1

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

    SETTING THE PROXY

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

    INTERCEPTING THE TRAFFIC

    在我看来,最好的办法是使用SandroProxy,一个Android的开源代理应用程序 . 它写得非常好,当前维护和支持,并允许您拦截HTTP流量甚至修改它 . 代码可以找到here,而示例应用程序可以找到here .


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

    • 拦截流量(甚至编辑它):由于代理设置,所有网络流量都通过代理地址,这对应于您的应用程序

    • 编辑是可选的:一切都将继续工作,因为没有设置代理

    • 一切都是本地的:不需要外部服务器,您的代理是已安装的应用程序

    • 不需要root

相关问题