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检测代理,防止别人抓包的主要内容,如果未能解决你的问题,请参考以下文章