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

View File

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