private void setupVpn() { ParcelFileDescriptor parcelFileDescriptor; Log.i("~~~","VpnService: try to setup VPN."); Builder builder = new Builder(); builder.setSession("firewall"); builder.addAddress("10.0.8.1", 32); builder.addRoute("0.0.0.0", 0); try { parcelFileDescriptor = builder.establish(); if (parcelFileDescriptor != null) { Log.i("~~~", "VpnService: call ProxyWorker.start()");
void newDNSServer(VpnService.Builder builder, String format, byte[] ipv6Template, InetAddress addr) throws UnknownHostException { // Optimally we'd allow either one, but the forwarder checks if upstream size is empty, so // we really need to acquire both an ipv6 and an ipv4 subnet. if (addr instanceof Inet6Address && ipv6Template == null) { Log.i(TAG, "newDNSServer: Ignoring DNS server " + addr); } else if (addr instanceof Inet4Address && format == null) { Log.i(TAG, "newDNSServer: Ignoring DNS server " + addr); } else if (addr instanceof Inet4Address) { upstreamDnsServers.add(addr); String alias = String.format(format, upstreamDnsServers.size() + 1); Log.i(TAG, "configure: Adding DNS Server " + addr + " as " + alias); builder.addDnsServer(alias); builder.addRoute(alias, 32); vpnWatchDog.setTarget(InetAddress.getByName(alias)); } else if (addr instanceof Inet6Address) { upstreamDnsServers.add(addr); ipv6Template[ipv6Template.length - 1] = (byte) (upstreamDnsServers.size() + 1); InetAddress i6addr = Inet6Address.getByAddress(ipv6Template); Log.i(TAG, "configure: Adding DNS Server " + addr + " as " + i6addr); builder.addDnsServer(i6addr); vpnWatchDog.setTarget(i6addr); } }
Builder builder = new Builder(); for (String parameter : parameters.split(" ")) { String[] fields = parameter.split(","); switch (fields[0].charAt(0)) { case 'm': builder.setMtu(Short.parseShort(fields[1])); break; case 'a': builder.addAddress(fields[1], Integer.parseInt(fields[2])); break; case 'r': builder.addRoute(fields[1], Integer.parseInt(fields[2])); break; case 'd': builder.addDnsServer(fields[1]); break; case 's': builder.addSearchDomain(fields[1]); break; mInterface = builder.setSession(mServerAddress) .setConfigureIntent(mConfigureIntent) .establish(); mParameters = parameters; Log.i("~~~", "New interface: " + parameters);
Builder builder = new Builder(); VpnStatus.logInfo(R.string.last_openvpn_tun_config); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && mProfile.mAllowLocalLAN) { addLocalNetworksToRoutes(); try { builder.addAddress(mLocalIP.mIp, mLocalIP.len); } catch (IllegalArgumentException iae) { VpnStatus.logError(R.string.dns_add_error, mLocalIP, iae.getLocalizedMessage()); String[] ipv6parts = mLocalIPv6.split("/"); try { builder.addAddress(ipv6parts[0], Integer.parseInt(ipv6parts[1])); } catch (IllegalArgumentException iae) { VpnStatus.logError(R.string.ip_add_error, mLocalIPv6, iae.getLocalizedMessage()); builder.addDnsServer(dns); } catch (IllegalArgumentException iae) { VpnStatus.logError(R.string.dns_add_error, dns, iae.getLocalizedMessage()); if ((Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT && !release.startsWith("4.4.3") && !release.startsWith("4.4.4") && !release.startsWith("4.4.5") && !release.startsWith("4.4.6")) && mMtu < 1280) { VpnStatus.logInfo(String.format(Locale.US, "Forcing MTU to 1280 instead of %d to workaround Android Bug #70916", mMtu)); builder.setMtu(1280); } else { builder.setMtu(mMtu); try { if (multicastRange.containsNet(route)) VpnStatus.logDebug(R.string.ignore_multicast_route, route.toString()); else builder.addRoute(route.getIPv4Address(), route.networkMask);
Builder builder = new Builder(); builder.setSession(getString(R.string.app_vpn_name)); if (Build.VERSION.SDK_INT >= 21) { try { if (!socks5_enable || !socks5_allapps) { builder.addAllowedApplication(KC_PACKAGE_NAME); if (socks5_enable) builder.addAllowedApplication(DMMLOGIN_PACKAGE_NAME); for (JsonElement pkg: allowed_apps) { builder.addAllowedApplication(pkg.getAsString()); builder.addAddress(vpn4, 32); if (ip6) { String vpn6 = prefs.getString("vpn6", "fd00:1:fd00:1:fd00:1:fd00:1"); Log.i(TAG, "vpn6=" + vpn6); builder.addAddress(vpn6, 128); if (ip6 || dns instanceof Inet4Address) { Log.i(TAG, "dns=" + dns); builder.addDnsServer(dns); for (IPUtil.CIDR include : IPUtil.toCIDR(start, IPUtil.minus1(exclude.getStart()))) try { builder.addRoute(include.address, include.prefix); } catch (Throwable ex) { Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex)); for (IPUtil.CIDR include : IPUtil.toCIDR("224.0.0.0", end)) try { builder.addRoute(include.address, include.prefix);
builder.setSession(tunnel.getName()); builder.setConfigureIntent(PendingIntent.getActivity(context, 0, configureIntent, 0)); builder.addDisallowedApplication(excludedApplication); builder.addAddress(addr.getAddress(), addr.getMask()); builder.addDnsServer(addr.getHostAddress()); builder.addRoute(addr.getAddress(), addr.getMask()); builder.setMtu(config.getInterface().getMtu().orElse(1280)); builder.setBlocking(true); try (final ParcelFileDescriptor tun = builder.establish()) { if (tun == null) throw new Exception(context.getString(R.string.tun_create_error));
private void establishVpn(PacketsTransfer packetsTransfer) { VpnService.Builder builder = mVpnService.new Builder(); builder.setMtu(mConfig.mtu); builder.addAddress(mConfig.address.address, mConfig.address.prefixLength); if (mConfig.session != null) { builder.setSession(mConfig.session); builder.setConfigureIntent(mConfig.configureIntent); builder.addRoute(ip.address, ip.prefixLength); builder.addDnsServer(address); builder.addAllowedApplication(packageName); builder.addDisallowedApplication(packageName); builder.addAllowedApplication(mVpnService.getPackageName()); ParcelFileDescriptor vpnDescriptor = builder.establish(); if (vpnDescriptor == null) { return;
private ParcelFileDescriptor establishVPN() throws Exception { Builder builder = new Builder(); builder.setMtu(ProxyConfigLoader.getsInstance().getMTU()); if (ProxyConfigLoader.IS_DEBUG) System.out.printf("setMtu: %d\n", ProxyConfigLoader.getsInstance().getMTU()); builder.addAddress(ipAddress.Address, ipAddress.PrefixLength); if (ProxyConfigLoader.IS_DEBUG) System.out.printf("addAddress: %s/%d\n", ipAddress.Address, ipAddress.PrefixLength); builder.addDnsServer(dns.Address); if (ProxyConfigLoader.IS_DEBUG) System.out.printf("addDnsServer: %s\n", dns.Address); builder.addRoute(routeAddress.Address, routeAddress.PrefixLength); if (ProxyConfigLoader.IS_DEBUG) System.out.printf("addRoute: %s/%d\n", routeAddress.Address, routeAddress.PrefixLength); builder.addRoute(ProxyUtils.fakeNetWorkIP(), 16); builder.addRoute("0.0.0.0", 0); if (ProxyConfigLoader.IS_DEBUG) System.out.printf("addDefaultRoute: 0.0.0.0/0\n"); if (value != null && !"".equals(value) && !servers.contains(value)) { servers.add(value); builder.addRoute(value, 32); if (ProxyConfigLoader.IS_DEBUG) System.out.printf("%s=%s\n", name, value);
Builder builder = new Builder(); for (String parameter : parameters.split(" ")) { String[] fields = parameter.split(","); switch (fields[0].charAt(0)) { case 'm': builder.setMtu(Short.parseShort(fields[1])); break; case 'a': builder.addAddress(fields[1], Integer.parseInt(fields[2])); break; case 'r': builder.addRoute(fields[1], Integer.parseInt(fields[2])); break; case 'd': builder.addDnsServer(fields[1]); break; case 's': builder.addSearchDomain(fields[1]); break; mInterface = builder.setSession(mServerAddress) .setConfigureIntent(mConfigureIntent) .establish(); mParameters = parameters; Log.i(TAG, "New interface: " + parameters);
Builder builder = new Builder(); builder.setMtu(ProxyConfig.Instance.getMTU()); builder.addAddress(ipAddress.Address, ipAddress.PrefixLength); if (ProxyConfig.IS_DEBUG) Log.d(Constant.TAG, String.format("addAddress: %s/%d\n", ipAddress.Address, ipAddress.PrefixLength)); builder.addDnsServer(dns.Address); builder.addRoute(addr[0], Integer.parseInt(addr[1])); builder.addRoute(CommonMethods.ipIntToString(ProxyConfig.FAKE_NETWORK_IP), 16); builder.addDisallowedApplication(name); builder.setConfigureIntent(pendingIntent); builder.setSession(ProxyConfig.Instance.getSessionName()); ParcelFileDescriptor pfdDescriptor = builder.establish(); onStatusChanged(ProxyConfig.Instance.getSessionName() + " " + getString(R.string.vpn_connected_status), true); return pfdDescriptor;
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private void setAllowedVpnPackages(Builder builder) { boolean atLeastOneAllowedApp = false; for (String pkg : mProfile.mAllowedAppsVpn) { try { if (mProfile.mAllowedAppsVpnAreDisallowed) { builder.addDisallowedApplication(pkg); } else { builder.addAllowedApplication(pkg); atLeastOneAllowedApp = true; } } catch (PackageManager.NameNotFoundException e) { mProfile.mAllowedAppsVpn.remove(pkg); VpnStatus.logInfo(R.string.app_no_longer_exists, pkg); } } if (!mProfile.mAllowedAppsVpnAreDisallowed && !atLeastOneAllowedApp) { VpnStatus.logDebug(R.string.no_allowed_app, getPackageName()); try { builder.addAllowedApplication(getPackageName()); } catch (PackageManager.NameNotFoundException e) { VpnStatus.logError("This should not happen: " + e.getLocalizedMessage()); } } if (mProfile.mAllowedAppsVpnAreDisallowed) { VpnStatus.logDebug(R.string.disallowed_vpn_apps_info, TextUtils.join(", ", mProfile.mAllowedAppsVpn)); } else { VpnStatus.logDebug(R.string.allowed_vpn_apps_info, TextUtils.join(", ", mProfile.mAllowedAppsVpn)); } }
public void run() { try { dnsModel = paramIntent.getParcelableExtra(DNS_MODEL); String modelJSON = gson.toJson(dnsModel); preferences.edit().putString("dnsModel", modelJSON).apply(); setFileDescriptor(builder.setSession(DNSService.this.getText(R.string.app_name).toString()). addAddress("192.168.0.1", 24).addDnsServer(dnsModel.getFirstDns()).addDnsServer(dnsModel.getSecondDns()).establish()); setTunnel(DatagramChannel.open()); tunnel.connect(new InetSocketAddress("127.0.0.1", 8087)); protect(tunnel.socket()); while (shouldRun) Thread.sleep(100L); } catch (Exception exception) { Timber.e(exception); } finally { if (fileDescriptor != null) { try { fileDescriptor.close(); setFileDescriptor(null); } catch (IOException e) { Timber.d(e); } } } } }
public Builder getBuilder() { return new Builder(); }
private ParcelFileDescriptor startVPN(Builder builder) throws SecurityException { try { return builder.establish(); } catch (SecurityException ex) { throw ex; } catch (Throwable ex) { Log.e(TAG, ex.toString() + "\n" + Log.getStackTraceString(ex)); return null; } }
private void setupVPN() { if (vpnInterface == null) { Builder builder = new Builder(); builder.addAddress(VPN_ADDRESS, 32); builder.addRoute(VPN_ROUTE, 0); vpnInterface = builder.setSession(getString(R.string.app_name)).setConfigureIntent(pendingIntent).establish(); } }
VpnService.Builder builder = vpnService.new Builder(); builder.addAddress(prefix + ".1", 24); } catch (IllegalArgumentException e) { continue; InetAddress addr = Inet6Address.getByAddress(ipv6Template); Log.d(TAG, "configure: Adding IPv6 address" + addr); builder.addAddress(addr, 120); } catch (Exception e) { e.printStackTrace(); builder.addAddress("192.168.50.1", 24); builder.setBlocking(true); builder.allowBypass(); builder.allowFamily(OsConstants.AF_INET); builder.allowFamily(OsConstants.AF_INET6); .setSession("DNS66") .setConfigureIntent( PendingIntent.getActivity(vpnService, 1, new Intent(vpnService, MainActivity.class), PendingIntent.FLAG_CANCEL_CURRENT)).establish(); Log.i(TAG, "Configured"); return pfd;
public void run() { try { Builder builder = new Builder() .setSession("Daedalus") .setConfigureIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class).putExtra(MainActivity.LAUNCH_FRAGMENT, MainActivity.FRAGMENT_SETTINGS), PendingIntent.FLAG_ONE_SHOT)); for (String prefix : new String[]{"10.0.0", "192.0.2", "198.51.100", "203.0.113", "192.168.50"}) { try { builder.addAddress(prefix + ".1", 24); } catch (IllegalArgumentException e) { continue; InetAddress addr = Inet6Address.getByAddress(ipv6Template); Log.d(TAG, "configure: Adding IPv6 address" + addr); builder.addAddress(addr, 120); } catch (Exception e) { Logger.logException(e); Logger.info("Daedalus VPN service is listening on " + primaryServer + " as " + primaryDNSServer.getHostAddress()); Logger.info("Daedalus VPN service is listening on " + secondaryServer + " as " + secondaryDNSServer.getHostAddress()); builder.addDnsServer(primaryDNSServer).addDnsServer(secondaryDNSServer); builder.setBlocking(true); builder.allowFamily(OsConstants.AF_INET); builder.allowFamily(OsConstants.AF_INET6); descriptor = builder.establish();
final List<String> disallowed = new ArrayList<>(); final List<String> allowed = new ArrayList<>(); when(builder.addDisallowedApplication(anyString())).thenAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { when(builder.addAllowedApplication(anyString())).thenAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable {
when(builder.addDnsServer(anyString())).thenAnswer(new Answer<VpnService.Builder>() { @Override public VpnService.Builder answer(InvocationOnMock invocation) throws Throwable { when(builder.addDnsServer(any(InetAddress.class))).thenAnswer(new Answer<VpnService.Builder>() { @Override public VpnService.Builder answer(InvocationOnMock invocation) throws Throwable {
@SuppressWarnings("checkstyle:MagicNumber") private boolean setupVpn(VpnConfiguration config) { Builder builder = new Builder(); builder.addAddress(VPN_ADDRESS, 32); builder.setSession(getString(R.string.app_name)); builder.addRoute("0.0.0.0", 0); } else { for (CIDR route : routes) { builder.addRoute(route.getAddress(), route.getPrefixLength()); if (dnsServers.length == 0) { builder.addDnsServer("8.8.8.8"); } else { for (InetAddress dnsServer : dnsServers) { builder.addDnsServer(dnsServer); builder.setBlocking(true); builder.setMtu(MTU); vpnInterface = builder.establish(); if (vpnInterface == null) { Log.w(TAG, "VPN starting failed, please retry");