Try alidns for CN users (#272)

* Add okHttp log

* Try alidns for CN users
This commit is contained in:
vvb2060 2021-03-05 23:19:40 +08:00 committed by GitHub
parent e033350982
commit 5b6221e04d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 29 deletions

View File

@ -157,6 +157,7 @@ dependencies {
implementation("com.takisoft.preferencex:preferencex-colorpicker:1.1.0") implementation("com.takisoft.preferencex:preferencex-colorpicker:1.1.0")
implementation("com.squareup.okhttp3:okhttp:$okhttpVersion") implementation("com.squareup.okhttp3:okhttp:$okhttpVersion")
implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttpVersion") implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttpVersion")
implementation("com.squareup.okhttp3:logging-interceptor:$okhttpVersion")
implementation("dev.rikka.rikkax.appcompat:appcompat:1.2.0-rc01") implementation("dev.rikka.rikkax.appcompat:appcompat:1.2.0-rc01")
implementation("dev.rikka.rikkax.core:core:1.3.0") implementation("dev.rikka.rikkax.core:core:1.3.0")
implementation("dev.rikka.rikkax.insets:insets:1.0.1") implementation("dev.rikka.rikkax.insets:insets:1.0.1")

View File

@ -26,6 +26,7 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@ -41,6 +42,7 @@ import io.github.lsposed.manager.util.DoHDNS;
import io.github.lsposed.manager.util.theme.ThemeUtil; import io.github.lsposed.manager.util.theme.ThemeUtil;
import okhttp3.Cache; import okhttp3.Cache;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import rikka.material.app.DayNightDelegate; import rikka.material.app.DayNightDelegate;
public class App extends Application { public class App extends Application {
@ -107,10 +109,12 @@ public class App extends Application {
@NonNull @NonNull
public static OkHttpClient getOkHttpClient() { public static OkHttpClient getOkHttpClient() {
if (okHttpClient == null) { if (okHttpClient == null) {
okHttpClient = new OkHttpClient.Builder() OkHttpClient.Builder builder = new OkHttpClient.Builder().cache(getOkHttpCache());
.cache(getOkHttpCache()) HttpLoggingInterceptor.Logger logger = s -> Log.v(TAG, s);
.dns(new DoHDNS()) HttpLoggingInterceptor log = new HttpLoggingInterceptor(logger);
.build(); log.setLevel(HttpLoggingInterceptor.Level.HEADERS);
if (BuildConfig.DEBUG) builder.addInterceptor(log);
okHttpClient = builder.dns(new DoHDNS(builder.build())).build();
} }
return okHttpClient; return okHttpClient;
} }

View File

@ -25,6 +25,7 @@ import androidx.annotation.NonNull;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.List; import java.util.List;
import java.util.Locale;
import io.github.lsposed.manager.App; import io.github.lsposed.manager.App;
import okhttp3.Dns; import okhttp3.Dns;
@ -34,41 +35,35 @@ import okhttp3.dnsoverhttps.DnsOverHttps;
public class DoHDNS implements Dns { public class DoHDNS implements Dns {
private static DnsOverHttps dnsOverHttps; private static DnsOverHttps cloudflare;
private static DnsOverHttps alidns;
public DoHDNS() { public DoHDNS(OkHttpClient client) {
DnsOverHttps.Builder builder = new DnsOverHttps.Builder() cloudflare = new DnsOverHttps.Builder()
.resolvePrivateAddresses(true) .resolvePrivateAddresses(true)
.resolvePublicAddresses(true) .client(client)
.client(new OkHttpClient.Builder().build()) .url(HttpUrl.get("https://cloudflare-dns.com/dns-query"))
.url(HttpUrl.get("https://cloudflare-dns.com/dns-query")); .build();
try {
builder.bootstrapDnsHosts( alidns = new DnsOverHttps.Builder()
InetAddress.getByName("104.16.248.249"), .resolvePrivateAddresses(true)
InetAddress.getByName("104.16.249.249"), .client(client)
InetAddress.getByName("104.16.111.25"), .url(HttpUrl.get("https://dns.alidns.com/dns-query"))
InetAddress.getByName("104.16.112.25"), .build();
InetAddress.getByName("162.159.36.1"),
InetAddress.getByName("162.159.46.1"),
InetAddress.getByName("1.1.1.1"),
InetAddress.getByName("1.0.0.1"),
InetAddress.getByName("2606:4700:4700::1111"),
InetAddress.getByName("2606:4700:4700::1001"),
InetAddress.getByName("2606:4700:4700::0064"),
InetAddress.getByName("2606:4700:4700::6400"));
} catch (UnknownHostException e) {
e.printStackTrace();
}
dnsOverHttps = builder.post(true).build();
} }
@NonNull @NonNull
@Override @Override
public List<InetAddress> lookup(@NonNull String hostname) throws UnknownHostException { public List<InetAddress> lookup(@NonNull String hostname) throws UnknownHostException {
if (App.getPreferences().getBoolean("doh", false)) { if (App.getPreferences().getBoolean("doh", false)) {
List<InetAddress> inetAddresses = dnsOverHttps.lookup(hostname); List<InetAddress> inetAddresses = cloudflare.lookup(hostname);
if (inetAddresses.size() > 0) { if (inetAddresses.size() > 0) {
return inetAddresses; return inetAddresses;
} else if ("CN".equals(Locale.getDefault().getCountry())) {
inetAddresses = alidns.lookup(hostname);
if (inetAddresses.size() > 0) {
return inetAddresses;
}
} }
} }
return SYSTEM.lookup(hostname); return SYSTEM.lookup(hostname);