mirror of
https://github.com/M66B/NetGuard.git
synced 2025-03-10 06:03:10 +00:00
Rewritten DNS server address handling
This commit is contained in:
parent
b3a07e1a8f
commit
57f77d7a4e
3 changed files with 31 additions and 60 deletions
|
@ -239,11 +239,8 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
|
|||
EditTextPreference pref_dns1 = (EditTextPreference) screen.findPreference("dns");
|
||||
EditTextPreference pref_dns2 = (EditTextPreference) screen.findPreference("dns2");
|
||||
EditTextPreference pref_ttl = (EditTextPreference) screen.findPreference("ttl");
|
||||
List<String> def_dns = Util.getDefaultDNS(this);
|
||||
pref_dns1.getEditText().setHint(def_dns.get(0));
|
||||
pref_dns2.getEditText().setHint(def_dns.get(1));
|
||||
pref_dns1.setTitle(getString(R.string.setting_dns, prefs.getString("dns", def_dns.get(0))));
|
||||
pref_dns2.setTitle(getString(R.string.setting_dns, prefs.getString("dns2", def_dns.get(1))));
|
||||
pref_dns1.setTitle(getString(R.string.setting_dns, prefs.getString("dns", "-")));
|
||||
pref_dns2.setTitle(getString(R.string.setting_dns, prefs.getString("dns2", "-")));
|
||||
pref_ttl.setTitle(getString(R.string.setting_ttl, prefs.getString("ttl", "259200")));
|
||||
|
||||
// SOCKS5 parameters
|
||||
|
@ -669,8 +666,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
|
|||
Toast.makeText(ActivitySettings.this, ex.toString(), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
getPreferenceScreen().findPreference(name).setTitle(
|
||||
getString(R.string.setting_dns,
|
||||
prefs.getString(name, Util.getDefaultDNS(this).get("dns".equals(name) ? 0 : 1))));
|
||||
getString(R.string.setting_dns, prefs.getString(name, "-")));
|
||||
ServiceSinkhole.reload("changed " + name, this, false);
|
||||
|
||||
} else if ("ttl".equals(name))
|
||||
|
|
|
@ -1125,12 +1125,10 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
// Get custom DNS servers
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean ip6 = prefs.getBoolean("ip6", true);
|
||||
boolean pdns = Util.isPrivateDns(context);
|
||||
boolean filter = prefs.getBoolean("filter", false);
|
||||
// Make sure normal DNS servers are used when private DNS is enabled
|
||||
String vpnDns1 = prefs.getString("dns", pdns && filter ? "8.8.8.8" : null);
|
||||
String vpnDns2 = prefs.getString("dns2", pdns && filter ? "8.8.4.4" : null);
|
||||
Log.i(TAG, "DNS system=" + TextUtils.join(",", sysDns) + " VPN1=" + vpnDns1 + " VPN2=" + vpnDns2);
|
||||
String vpnDns1 = prefs.getString("dns", null);
|
||||
String vpnDns2 = prefs.getString("dns2", null);
|
||||
Log.i(TAG, "DNS system=" + TextUtils.join(",", sysDns) + " config=" + vpnDns1 + "," + vpnDns2);
|
||||
|
||||
if (vpnDns1 != null)
|
||||
try {
|
||||
|
@ -1167,8 +1165,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
// Remove local DNS servers when not routing LAN
|
||||
boolean lan = prefs.getBoolean("lan", false);
|
||||
boolean use_hosts = prefs.getBoolean("use_hosts", false);
|
||||
if (lan && use_hosts && filter) {
|
||||
List<InetAddress> listLocal = new ArrayList<>();
|
||||
if (lan && use_hosts && filter)
|
||||
try {
|
||||
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
|
||||
if (nis != null)
|
||||
|
@ -1184,51 +1181,36 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
int prefix = ia.getNetworkPrefixLength();
|
||||
BigInteger mask = BigInteger.valueOf(-1).shiftLeft(hostAddress.getAddress().length * 8 - prefix);
|
||||
|
||||
for (InetAddress dns : listDns)
|
||||
for (InetAddress dns : new ArrayList<>(listDns))
|
||||
if (hostAddress.getAddress().length == dns.getAddress().length) {
|
||||
BigInteger ip = new BigInteger(1, dns.getAddress());
|
||||
|
||||
if (host.and(mask).equals(ip.and(mask))) {
|
||||
Log.i(TAG, "Local DNS server host=" + hostAddress + "/" + prefix + " dns=" + dns);
|
||||
listLocal.add(dns);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
|
||||
}
|
||||
|
||||
List<InetAddress> listDns4 = new ArrayList<>();
|
||||
List<InetAddress> listDns6 = new ArrayList<>();
|
||||
try {
|
||||
listDns4.add(InetAddress.getByName("8.8.8.8"));
|
||||
listDns4.add(InetAddress.getByName("8.8.4.4"));
|
||||
if (ip6) {
|
||||
listDns6.add(InetAddress.getByName("2001:4860:4860::8888"));
|
||||
listDns6.add(InetAddress.getByName("2001:4860:4860::8844"));
|
||||
}
|
||||
|
||||
} catch (Throwable ex) {
|
||||
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
|
||||
}
|
||||
|
||||
for (InetAddress dns : listLocal) {
|
||||
listDns.remove(dns);
|
||||
if (dns instanceof Inet4Address) {
|
||||
if (listDns4.size() > 0) {
|
||||
listDns.add(listDns4.get(0));
|
||||
listDns4.remove(0);
|
||||
}
|
||||
} else {
|
||||
if (listDns6.size() > 0) {
|
||||
listDns.add(listDns6.get(0));
|
||||
listDns6.remove(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
|
||||
}
|
||||
|
||||
// Always set DNS servers
|
||||
if (listDns.size() == 0)
|
||||
try {
|
||||
listDns.add(InetAddress.getByName("8.8.8.8"));
|
||||
listDns.add(InetAddress.getByName("8.8.4.4"));
|
||||
if (ip6) {
|
||||
listDns.add(InetAddress.getByName("2001:4860:4860::8888"));
|
||||
listDns.add(InetAddress.getByName("2001:4860:4860::8844"));
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex));
|
||||
}
|
||||
|
||||
Log.i(TAG, "Get DNS=" + TextUtils.join(",", listDns));
|
||||
|
||||
return listDns;
|
||||
}
|
||||
|
@ -1272,11 +1254,11 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
|
||||
// VPN address
|
||||
String vpn4 = prefs.getString("vpn4", "10.1.10.1");
|
||||
Log.i(TAG, "vpn4=" + vpn4);
|
||||
Log.i(TAG, "Using VPN4=" + vpn4);
|
||||
builder.addAddress(vpn4, 32);
|
||||
if (ip6) {
|
||||
String vpn6 = prefs.getString("vpn6", "fd00:1:fd00:1:fd00:1:fd00:1");
|
||||
Log.i(TAG, "vpn6=" + vpn6);
|
||||
Log.i(TAG, "Using VPN6=" + vpn6);
|
||||
builder.addAddress(vpn6, 128);
|
||||
}
|
||||
|
||||
|
@ -1284,7 +1266,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
if (filter)
|
||||
for (InetAddress dns : getDns(ServiceSinkhole.this)) {
|
||||
if (ip6 || dns instanceof Inet4Address) {
|
||||
Log.i(TAG, "dns=" + dns);
|
||||
Log.i(TAG, "Using DNS=" + dns);
|
||||
builder.addDnsServer(dns);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -273,8 +273,8 @@ public class Util {
|
|||
}
|
||||
|
||||
public static List<String> getDefaultDNS(Context context) {
|
||||
String dns1 = null;
|
||||
String dns2 = null;
|
||||
List<String> listDns = new ArrayList<>();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
Network an = cm.getActiveNetwork();
|
||||
|
@ -282,29 +282,22 @@ public class Util {
|
|||
LinkProperties lp = cm.getLinkProperties(an);
|
||||
if (lp != null) {
|
||||
List<InetAddress> dns = lp.getDnsServers();
|
||||
if (dns != null) {
|
||||
if (dns.size() > 0)
|
||||
dns1 = dns.get(0).getHostAddress();
|
||||
if (dns.size() > 1)
|
||||
dns2 = dns.get(1).getHostAddress();
|
||||
for (InetAddress d : dns)
|
||||
if (dns != null)
|
||||
for (InetAddress d : dns) {
|
||||
Log.i(TAG, "DNS from LP: " + d.getHostAddress());
|
||||
listDns.add(d.getHostAddress().split("%")[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dns1 = jni_getprop("net.dns1");
|
||||
dns2 = jni_getprop("net.dns2");
|
||||
String dns1 = jni_getprop("net.dns1");
|
||||
String dns2 = jni_getprop("net.dns2");
|
||||
if (dns1 != null)
|
||||
listDns.add(dns1.split("%")[0]);
|
||||
if (dns2 != null)
|
||||
listDns.add(dns2.split("%")[0]);
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(dns1))
|
||||
dns1 = dns1.split("%")[0];
|
||||
if (!TextUtils.isEmpty(dns2))
|
||||
dns2 = dns2.split("%")[0];
|
||||
|
||||
List<String> listDns = new ArrayList<>();
|
||||
listDns.add(TextUtils.isEmpty(dns1) ? "8.8.8.8" : dns1);
|
||||
listDns.add(TextUtils.isEmpty(dns2) ? "8.8.4.4" : dns2);
|
||||
return listDns;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue