现象
模拟器开启WLAN代理如下:
发现抓不到包:
但是app却依旧正常返回数据,没有断网:
原理
网络请求代理设置NO_PROXY
- android系统设置的代理并不是强制对所有app生效的
- app可以在网络请求类库中通过自定义代理设置,选择是否要走系统代理
public void run() {
Looper.prepare();
OkHttpClient okHttpClient = new OkHttpClient.Builder().
proxy(Proxy.NO_PROXY).//okhttp不设置代理
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();
}
解决方案
既然不走系统代理,那么直接抓系统的包不就可以了吗
被抓包的APP并不知道自己被套在了第几层
方案一
使用proxifier 将模拟器请求直接转发到抓包软件,相当于抓安卓系统的包:
抓包结果:正常抓包
方案二
同理,使用本地VPN抓包软件,如抓包精灵
方案三
justtrustme或者直接okhttp代理方法,使代理设置语句无效
总结
一层一层又一层,总有套路得人心!