根据官方文件:
然而,我仍然不清楚,挖掘dns66的来源和Netguard的来源也没有多大帮助。
我不确定它应该是服务器地址,但我想不出任何其他有意义的东西。如果我想在establish()
之前实现localVPN,我会设置什么地址?
这是dns66的来源,但我不明白为什么它会添加这些地址(如果所有内容"失败")它如何知道192.168.50.1将起作用?:?:
// Determine a prefix we can use. These are all reserved prefixes for example
// use, so it's possible they might be blocked.
for (String prefix : new String[]{"192.0.2", "198.51.100", "203.0.113"}) {
try {
builder.addAddress(prefix + ".1", 24);
} catch (IllegalArgumentException e) {
continue;
}
format = prefix + ".%d";
break;
}
// For fancy reasons, this is the 2001:db8::/120 subnet of the /32 subnet reserved for
// documentation purposes. We should do this differently. Anyone have a free /120 subnet
// for us to use?
byte[] ipv6Template = new byte[]{32, 1, 13, (byte) (184 & 0xFF), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
if (hasIpV6Servers(config, dnsServers)) {
try {
InetAddress addr = Inet6Address.getByAddress(ipv6Template);
Log.d(TAG, "configure: Adding IPv6 address" + addr);
builder.addAddress(addr, 120);
} catch (Exception e) {
e.printStackTrace();
ipv6Template = null;
}
} else {
ipv6Template = null;
}
if (format == null) {
Log.w(TAG, "configure: Could not find a prefix to use, directly using DNS servers");
builder.addAddress("192.168.50.1", 24);
}
答案 0 :(得分:0)
您基本上添加了Bridge
(提供整个Internet的路由器)的IP,
对我来说,做类似的事情就足够了:
import android.net.VpnService.Builder;
// ...
boolean is_ip_version_6_supported = true;
Builder builder = new Builder();
builder.setSession("My App's session");
// Specify address of the bridge (or router providing the whole internet),
// to use for IP version 4 and 6 connection capturing (like a firewall).
builder.addAddress("10.1.10.1", 32);
if (is_ip_version_6_supported) {
builder.addAddress("fd00:1:fd00:1:fd00:1:fd00:1", 128);
}
// ...
注意:我也是初学者,因此,随时可以编辑和改进我的帖子;-)
无论如何,您的应用程序将负责将本地捕获的数据包转发到VPN服务器,并将远程的响应数据包注入本地。