Ejemplo n.º 1
0
        private void Cleanup()
        {
            Utils.SafeClose(m_fileDescriptor);
            m_fileDescriptor = null;

            Utils.SafeDispose(m_builder);
            m_builder = null;
        }
Ejemplo n.º 2
0
        public AndroidVPNContext(AndroidVPNService service)
        {
            m_builder = new VpnService.Builder(service);

            m_builder.SetConfigureIntent(service.CreateConfigIntent());

            InitDNS();
            InitMTU();
            InitApplications();
        }
Ejemplo n.º 3
0
        public void StartVpn()
        {
            if ((VpnConfig.Handler == null) == (VpnConfig.Socks == null))
            {
                throw new Exception("Should specify (('Handler' and optional 'SocksPort') or 'Socks') and optional 'DnsResolver'");
            }

            InitAdapters();

            if (_pfd != null)
            {
                return;
            }

            var builder = new VpnService.Builder(Bg)
                          .SetSession("NaiveSocks VPN bridge")
                          .SetMtu(VpnConfig.Mtu)
                          .AddAddress(ClientIp, 24)
                          .AddDnsServer(RouterIp)
                          .AddRoute("0.0.0.0", 0);

            if (VpnConfig.Ipv6)
            {
                builder.AddAddress(ClientIp6, 126);
                builder.AddRoute("::", 0);
            }
            foreach (var item in VpnConfig.RemoteDns)
            {
                builder.AddDnsServer(item);
            }
            var  me           = Bg.PackageName;
            bool isAnyAllowed = false;

            if (VpnConfig.EnableAppFilter && !string.IsNullOrEmpty(VpnConfig.AppList))
            {
                Logging.info("applying AppList...");
                foreach (var item in from x in VpnConfig.AppList.Split('\n')
                         let y = x.Trim()
                                 where y.Length > 0 && y != me
                                 select y)
                {
                    try {
                        if (VpnConfig.ByPass)
                        {
                            builder.AddDisallowedApplication(item);
                        }
                        else
                        {
                            builder.AddAllowedApplication(item);
                            isAnyAllowed = true;
                        }
                    } catch (Exception e) {
                        Logging.error($"adding package '{item}': {e.Message}");
                    }
                }
            }
            if (!isAnyAllowed)
            {
                builder.AddDisallowedApplication(me);
            }

            _pfd     = builder.Establish();
            _running = 1;
            Logging.info("VPN established, fd=" + _pfd.Fd);

            string dnsgw = null;

            if (VpnConfig.DnsGw.IsNullOrEmpty() == false)
            {
                dnsgw = VpnConfig.DnsGw;
            }
            else if (VpnConfig.LocalDnsPort > 0)
            {
                dnsgw = "127.0.0.1:" + VpnConfig.LocalDnsPort;
            }
            StartTun2Socks("127.0.0.1:" + socksInAdapter.listen.Port, dnsgw);
        }