防止抓包
防止抓包
防止抓包
Android7.0 及以上配置 networkSecurityConfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
ProxySelector
OkHttp 中 socket 连接建立的过程:
在建立 socket 连接之前,OkHttp 会获取系统的代理信息,如果设置代理,那么通过 DNS 解析其 IP 然后使用代理 IP 来建立 socket 连接。如果没有设置代理,那么会使用请求中的 url 的 IP 地址,来建立连接。
如果要防抓包,那只需要绕过代理就可以了。
OkHttp 使用 ProxySelector 来获取代理信息,在构造 OkHttpClient 时是可以设置的,其默认值是 ProxySelector.getDefault(),该默认值会反应出系统的代理信息。
那么我们就可以提供自己的 ProxySelector 实现来达到绕过系统代理的能力。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
val client = OkHttpClient.Builder()
.proxySelector(object : ProxySelector() {
override fun select(uri: URI?): MutableList<Proxy> {
Log.i("hacket", "select: $uri")
return Collections.singletonList(Proxy.NO_PROXY)
}
override fun connectFailed(
uri: URI?,
sa: SocketAddress?,
ioe: IOException?
) {
ioe?.printStackTrace()
Log.w("hacket", "connectFailed uri: $uri, sa=$sa, ioe=$ioe")
}
})
.build()
其他
https://juejin.cn/post/7175325220109025339?>
本文由作者按照 CC BY 4.0 进行授权