我想创建一个自定义DNS,以便为我的所有RetroFit连接使用CloudFlare 1.1.1.1和1.0.0.1。这将替换SYSTEM DNS。
所以我做了这个:
import okhttp3.Dns
import java.net.InetAddress
class CustomDns : Dns {
override fun lookup(hostname: String): List<InetAddress> {
TODO("Not yet implemented")
}
}
我有点不知道如何实现抽象查找函数。
文件上写着:
返回主机名的IP地址,按顺序排列OkHttp尝试。如果与地址的连接失败,OkHttp将使用下一个地址重试连接,直到连接已完成,IP地址集已用尽,或者限制为exceeded.abstract趣味查找(主机名:字符串(:列出
这是否意味着我创建了一个HashMap。密钥将是我的API的域,值将包含我的API解析到的IP地址列表?我觉得不太对劲。
有没有一种方法可以在这个实现中只使用1.1.1.1作为DNS解析程序?
如果您愿意通过Https使用Dns,那么您可以使用okhttp doh连接到1.1.1.1
https://github.com/square/okhttp/blob/858939f025068c6d3581338317bba03e63ebd909/okhttp-dnsoverhttps/README.md
val appCache = Cache(File("cacheDir", "okhttpcache"), 10 * 1024 * 1024)
val bootstrapClient = OkHttpClient.Builder().cache(appCache).build()
val dns = DnsOverHttps.Builder().client(bootstrapClient)
.url("https://1.1.1.1/dns-query".toHttpUrl())
.build()
val client = bootstrapClient.newBuilder().dns(dns).build()
其他示例DNS提供商https://github.com/square/okhttp/blob/master/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DohProviders.java
如果你想使用常规DNS,但你需要在应用程序之外的设备上进行这些更改。或者提供您自己的实现,也许是基于Netty或类似的实现?