如何让app不走系统代理?

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让app不走系统代理?相关的知识,希望对你有一定的参考价值。

作为一名数据采集工程师,现在在研究如何防止别人采集我们的数据。当然这就是一个博弈,在博弈的过程中大家都能得到技术上的进步。
今天写的文章是如何让app不走系统代理

效果图

流程分析

  1. 当点击按钮的时候,使用okhttp发起了一个百度的请求。
  2. 将获得的内容通过Toast弹出。
  3. 同时在观察fiddler是否抓取到了请求。

原理分析

  • 在网络请求的时候,通过OkHttp可以设置一个选项,代理的类型。我们在这里直接设置成Proxy.NO_PROXY。这样话即使android设置了代理,我们的app也不会走代理。
  • 如果我们把proxy选项注释掉,看下效果。
  • 效果显而易见呀。很多网络请求类库应该都会有代理的选项,大家可以试下其他的。

源码

 public void run() 
        Looper.prepare();
        OkHttpClient okHttpClient = new OkHttpClient.Builder().
                proxy(Proxy.NO_PROXY).
                build();
        Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .build();
        Response response = null;
        try 
            response = okHttpClient.newCall(request).execute();
            Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();
         catch (IOException e) 
            e.printStackTrace();
        
        Looper.loop();
    

总结

  • android系统设置的代理并不是强制对所有app生效的
  • app可以在网络请求类库中通过自定义代理设置,选择是否要走系统代理
  • 看到这里,大家应该知道为什么有时候通过fiddler无法抓取app的包了么?即使app使用的是http的请求。
  • 当然,既然android系统的代理设置并不是强制的,那么我们想抓取app的包应该怎么办呢?我只管抛出问题。

以上是关于如何让app不走系统代理?的主要内容,如果未能解决你的问题,请参考以下文章

抓包代理与软件代理产生冲突

nodejshttp不走系统代理

frida hook的一些尝试

frida hook的一些尝试

Mac 命令行 Command Line 配置代理, 配置白名单

如何让vmware虚拟机经过socks5代理?