mirror of https://github.com/NekoX-Dev/NekoX.git
Dns fixes
This commit is contained in:
parent
be2516ccd7
commit
01e8c8c64c
|
@ -3,13 +3,13 @@ import cn.hutool.core.util.RuntimeUtil
|
|||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
def verName = "7.4.2-rc07"
|
||||
def verName = "7.4.2-rc08"
|
||||
|
||||
if (System.getenv("DEBUG_BUILD") == "true") {
|
||||
verName += "-" + RuntimeUtil.execForStr("git log --pretty=format:'%h' -n 1)")
|
||||
}
|
||||
|
||||
def verCode = 188
|
||||
def verCode = 190
|
||||
|
||||
def officialVer = "7.4.2"
|
||||
def officialCode = 2227
|
||||
|
@ -84,7 +84,6 @@ dependencies {
|
|||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2'
|
||||
|
||||
implementation "com.squareup.okhttp3:okhttp:$okHttpVersion"
|
||||
implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:$okHttpVersion"
|
||||
implementation 'dnsjava:dnsjava:3.3.1'
|
||||
implementation 'org.dizitart:nitrite:3.4.3'
|
||||
|
||||
|
|
|
@ -864,7 +864,7 @@ public class ConnectionsManager extends BaseController {
|
|||
|
||||
String domain = native_isTestBackend(currentAccount) != 0 ? "tapv3.stel.com" : AccountInstance.getInstance(currentAccount).getMessagesController().dcDomainName;
|
||||
try {
|
||||
ArrayList<String> arrayList = DnsFactory.Companion.getTxts(domain);
|
||||
List<String> arrayList = DnsFactory.Companion.getTxts(domain);
|
||||
Collections.sort(arrayList, (o1, o2) -> {
|
||||
int l1 = o1.length();
|
||||
int l2 = o2.length();
|
||||
|
|
|
@ -1,108 +1,80 @@
|
|||
package tw.nekomimi.nekogram.utils
|
||||
|
||||
import android.os.Build
|
||||
import cn.hutool.core.util.ArrayUtil
|
||||
import okhttp3.Dns
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.dnsoverhttps.DnsOverHttps
|
||||
import org.telegram.messenger.FileLog
|
||||
import org.telegram.tgnet.ConnectionsManager
|
||||
import org.xbill.DNS.DohResolver
|
||||
import org.xbill.DNS.Lookup
|
||||
import org.xbill.DNS.TXTRecord
|
||||
import org.xbill.DNS.Type
|
||||
import org.xbill.DNS.*
|
||||
import java.net.InetAddress
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
|
||||
open class DnsFactory : Dns {
|
||||
|
||||
val providers = LinkedList<DohResolver>()
|
||||
|
||||
companion object : DnsFactory() {
|
||||
|
||||
init {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
|
||||
addProvider("https://mozilla.cloudflare-dns.com/dns-query")
|
||||
addProvider("https://dns.google/dns-query")
|
||||
addProvider("https://dns.twnic.tw/dns-query")
|
||||
addProvider("https://dns.adguard.com/dns-query")
|
||||
|
||||
}
|
||||
addProvider("https://dns.twnic.tw/dns-query")
|
||||
addProvider("https://mozilla.cloudflare-dns.com/dns-query")
|
||||
addProvider("https://dns.google/dns-query")
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
val providers = LinkedList<DnsOverHttps>()
|
||||
val dnsJavaProviders = LinkedList<DohResolver>()
|
||||
|
||||
val client = OkHttpClient.Builder().connectTimeout(3,TimeUnit.SECONDS).build()
|
||||
fun addProvider(url: String) = providers.add(DohResolver(url))
|
||||
|
||||
fun addProvider(url: String) {
|
||||
override fun lookup(domain: String): List<InetAddress> {
|
||||
|
||||
providers.add(DnsOverHttps.Builder()
|
||||
.client(client)
|
||||
.url(url.toHttpUrl())
|
||||
.includeIPv6(ConnectionsManager.useIpv6Address())
|
||||
.build())
|
||||
FileLog.d("Lookup $domain")
|
||||
|
||||
for (provider in providers) {
|
||||
FileLog.d("Provider ${provider.uriTemplate}")
|
||||
|
||||
val lookup = Lookup(Name.fromConstantString(domain), if (!ConnectionsManager.useIpv6Address()) Type.A else Type.AAAA)
|
||||
lookup.setSearchPath(* emptyArray<String>())
|
||||
lookup.setCache(null)
|
||||
lookup.setResolver(provider)
|
||||
lookup.run()
|
||||
|
||||
if (lookup.result != Lookup.SUCCESSFUL) continue
|
||||
|
||||
FileLog.d("Results: " + ArrayUtil.toString(lookup.answers))
|
||||
return lookup.answers.map { (it as? ARecord)?.address ?: (it as AAAARecord).address }
|
||||
}
|
||||
|
||||
runCatching { return InetAddress.getAllByName(domain).toList() }
|
||||
return listOf()
|
||||
|
||||
}
|
||||
|
||||
override fun lookup(hostname: String): List<InetAddress> {
|
||||
fun getTxts(domain: String): List<String> {
|
||||
|
||||
providers.forEach { provider ->
|
||||
FileLog.d("Lookup $domain for txts")
|
||||
|
||||
runCatching {
|
||||
return provider.lookup(hostname)
|
||||
}.onFailure {
|
||||
FileLog.e(it)
|
||||
}
|
||||
for (provider in providers) {
|
||||
FileLog.d("Provider ${provider.uriTemplate}")
|
||||
|
||||
}
|
||||
val lookup = Lookup(Name.fromConstantString(domain), Type.TXT)
|
||||
lookup.setSearchPath(* emptyArray<String>())
|
||||
lookup.setCache(null)
|
||||
lookup.setResolver(provider)
|
||||
lookup.run()
|
||||
|
||||
runCatching {
|
||||
|
||||
return Dns.SYSTEM.lookup(hostname)
|
||||
if (lookup.result != Lookup.SUCCESSFUL) continue
|
||||
FileLog.d("Results: " + ArrayUtil.toString(lookup.answers))
|
||||
|
||||
val result = ArrayList<String>()
|
||||
for (record in lookup.answers.filterIsInstance<TXTRecord>()) result.addAll(record.strings)
|
||||
return result
|
||||
}
|
||||
|
||||
return listOf()
|
||||
|
||||
}
|
||||
|
||||
fun getTxts(domain: String): ArrayList<String> {
|
||||
|
||||
val results = ArrayList<String>()
|
||||
|
||||
dnsJavaProviders.forEach {
|
||||
|
||||
runCatching {
|
||||
|
||||
val lookup = Lookup(domain, Type.TXT)
|
||||
lookup.setResolver(it)
|
||||
lookup.run()
|
||||
|
||||
if (lookup.result == Lookup.SUCCESSFUL) {
|
||||
|
||||
lookup.answers.forEach {
|
||||
|
||||
(it as TXTRecord).strings.forEach {
|
||||
|
||||
results.add(it)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return results
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue