android检测代理,防止别人抓包

Posted Morven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android检测代理,防止别人抓包相关的知识,希望对你有一定的参考价值。

APP在发起网络请求前会检测系统是否设置了代理,如果发现有代理,就不发起请求。以下是一段APP检测系统是否有代理的实例代码:

public static boolean isWifiProxy(Context context) 
    final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
    String proxyAddress;
    int proxyPort;
    if (IS_ICS_OR_LATER) 
        proxyAddress = System.getProperty("http.proxyHost");    //获取代理主机
        String portStr = System.getProperty("http.proxyPort");  //获取代理端口
        proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
     else 
        proxyAddress = android.net.Proxy.getHost(context);
        proxyPort = android.net.Proxy.getPort(context);
    
   Log.i("代理信息","proxyAddress :"+proxyAddress + "prot : " proxyPort")
   return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);


另外一种方法:

以下是一段使用No 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();
    

不论使用那种方式高手的话都有办法绕过检测的。只能防一般的人。
当然,有人说使用证书方式。对证书方式也是比较安全的一种。但是证书也是可以获取到的。
反正没有十全十美的办法。

不过使用证书的方法还是相对安全的。至少比上面的方法安全。开发人员只需要将证书校验的那部分代码混淆,就能够防止通用的SSL unpinning方法。这样能更安全。

以上是关于android检测代理,防止别人抓包的主要内容,如果未能解决你的问题,请参考以下文章

android检测代理,防止别人抓包

android检测代理,防止别人抓包

Android App 如何防止抓包

ios开发防止App被抓包

HTTPS 抓包原理以及 Android 端如何防止抓包

Android 开发中的SSL pinning