• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qw30716
V2EX  ›  程序员

Android 应用通过代码实现拦截本应用内的所有网络请求流量,同时可以修改请求信息,例如请求头,请求体,然后转发的第三方 jar 包或者其他的方法,求推荐。

  •  
  •   qw30716 · Feb 24, 2017 · 11927 views
    This topic created in 3458 days ago, the information mentioned may be changed or developed.
    目前我经过查找资料发现:有三种方式可以实现拦截某个 APP 网络请求,但是都有各种局限性。
    1.Android 内置 VPNservice :通过虚拟网卡实现拦截,有系统弹窗提示,用户点击确认才生效;
    2.tcpdump 等 jar 包:需要 root 手机才能实现抓包功能
    3.代理拦截:基于 Netty 、 browsermob-proxy 拦截,但是需要手动设置 WiFi 代理,如果为 3G , 4G 网络则不可行
    所以我想请教一下,各位还有没有其他方式拦截网络请求,不需要用户操作,不需要手机 root ,不需要手动设置代理等限制的方法?或者给个思路也行
    17 replies    2017-02-24 21:07:00 +08:00
    ahjsrhj
        1
    ahjsrhj  
       Feb 24, 2017
    okhttp 的话可以使用拦截器, https://github.com/jgilfelt/chuck
    但是好像不符合你的需求- -
    感觉你这种需求用途很微妙啊
    qw30716
        2
    qw30716  
    OP
       Feb 24, 2017
    感谢你的回答,但是不能使用任何请求框架拦截,用途其实很正当的,主要用于加固的时候拦截网络流量
    honeycomb
        3
    honeycomb  
       Feb 24, 2017 via Android
    facebook 前两天开源了一个调试框架,据说可以绕过证书绑定,可以看看。
    figofuture
        4
    figofuture  
       Feb 24, 2017
    okhttp
    qw30716
        5
    qw30716  
    OP
       Feb 24, 2017
    @honeycomb 什么开源框架,名称是啥?
    qw30716
        6
    qw30716  
    OP
       Feb 24, 2017
    其实我的意思是不管你使用什么请求框架,例如 okhttp 也行,我通过一些第三方 jar 或者直接在底层 socket 方法拦截,然后拦截到 http 请求,就可以修改请求头,请求体信息,一些网络嗅探 APP 的原理
    LancerXin
        7
    LancerXin  
       Feb 24, 2017
    或许可以尝试用反射修改 sdk 某些关键类实现,比如 HttpUrlConnection Socket 等..

    只是个思路...
    qw30716
        8
    qw30716  
    OP
       Feb 24, 2017
    @LancerXin 如果可以直接修改 socket 的话是比较好的,我觉得如果有方法,应该是比较偏向于底层,从网卡驱动入手
    xingda920813
        9
    xingda920813  
       Feb 24, 2017
    OkHttp 拦截器. Request req = chain.request(); Response res = chain.proceed(req); 可以自由的对 Request 和 Response 进行修改.
    heiher
        10
    heiher  
       Feb 24, 2017 via Android
    能够有 root 权限的话还是用 iptables REDIRECT 来做,我就是用它来做全局或按应用的透明代理服务。
    yrom
        11
    yrom  
       Feb 24, 2017
    我猜应该没有,或者有很难绕过的限制,因为如果有的话,各种统计类的 Android 第三方 sdk 早带了。。
    youxiachai
        12
    youxiachai  
       Feb 24, 2017
    感觉 lz 是想做改包....

    静默拦截网络请求....想想就带感...
    heiher
        13
    heiher  
       Feb 24, 2017 via Android   ❤️ 1
    https://github.com/heiher/hev-socks5-tproxy

    这是透明代理实现的代码,它创建一个 tcp socket 用于接受重定向过来的 tcp 连接,一个 udp socket 接收重定向过来的 dns 请求,加上 socks5 协议头,转发 socks5 server 。拿走,不谢。:)
    qw30716
        14
    qw30716  
    OP
       Feb 24, 2017
    静默拦截网络请求,其实也是差不多这个意思了,我刚发现有个应用叫安信手机证券很牛逼,你自己设置了代理以后根本就抓不到这个 APP 请求时的包,它直接抓到了一个 127.0.0.1 的代理,大家有兴趣可以研究一下
    qw30716
        15
    qw30716  
    OP
       Feb 24, 2017
    @heiher 你的这个透明代理实现的代码是需要 root 手机才行吗
    heiher
        16
    heiher  
       Feb 24, 2017 via Android
    @qw30716 是的,不用 root 也不用 vpn service 能搞定?找到方法也告诉我一下哈。
    linhua
        17
    linhua  
       Feb 24, 2017
    首先,你要想清楚,你这个只是针对 HTTP 吗? HTTPS 就是用来防中间人的,你根本就看不到里面的 HTTP 请求。而且有的 APP 根本就不认 WiFi 代理,像 twitter
    https://github.com/phuslu/goproxy/issues/1106
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2592 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 15:23 · PVG 23:23 · LAX 08:23 · JFK 11:23
    ♥ Do have faith in what you're doing.