Пример #1
0
 /// <summary>
 ///     Click event for the network cards.
 /// </summary>
 /// <param name="localNetworkInterface">The clicked network card.</param>
 public void NetworkCardClicked(LocalNetworkInterface localNetworkInterface)
 {
     if (localNetworkInterface == null)
     {
         return;
     }
     if (localNetworkInterface.UseDnsCrypt)
     {
         var status = LocalNetworkInterfaceManager.SetNameservers(localNetworkInterface, new List <string>(),
                                                                  NetworkInterfaceComponent.IPv4);
         LocalNetworkInterfaceManager.SetNameservers(localNetworkInterface, new List <string>(),
                                                     NetworkInterfaceComponent.IPv6);
         localNetworkInterface.UseDnsCrypt = !status;
     }
     else
     {
         var dns4 = new List <string>();
         var dns6 = new List <string>();
         if (PrimaryResolver != null)
         {
             if (!string.IsNullOrEmpty(PrimaryResolver.ProviderPublicKey))
             {
                 // only add the local address if the proxy is running
                 if (PrimaryDnsCryptProxyManager.DnsCryptProxy.IsReady && PrimaryDnsCryptProxyManager.IsDnsCryptProxyRunning())
                 {
                     dns4.Add(Global.PrimaryResolverAddress);
                     if (_userData.UseIpv6)
                     {
                         dns6.Add(Global.PrimaryResolverAddress6);
                     }
                 }
             }
         }
         if (SecondaryResolver != null)
         {
             if (!string.IsNullOrEmpty(SecondaryResolver.ProviderPublicKey))
             {
                 // only add the local address if the proxy is running
                 if (SecondaryDnsCryptProxyManager.DnsCryptProxy.IsReady && SecondaryDnsCryptProxyManager.IsDnsCryptProxyRunning())
                 {
                     dns4.Add(Global.SecondaryResolverAddress);
                     if (_userData.UseIpv6)
                     {
                         dns6.Add(Global.SecondaryResolverAddress6);
                     }
                 }
             }
         }
         var status = LocalNetworkInterfaceManager.SetNameservers(localNetworkInterface, dns4, NetworkInterfaceComponent.IPv4);
         if (_userData.UseIpv6)
         {
             LocalNetworkInterfaceManager.SetNameservers(localNetworkInterface, dns6, NetworkInterfaceComponent.IPv6);
         }
         localNetworkInterface.UseDnsCrypt = status;
     }
     LoadNetworkCards();
 }
Пример #2
0
        /// <summary>
        ///     Uninstall all installed dnscrypt-proxy services.
        /// </summary>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        /// <exception cref="NetworkInformationException"></exception>
        /// <exception cref="ArgumentNullException"></exception>
        public async void UninstallServices()
        {
            var result = _windowManager.ShowMetroMessageBox(
                LocalizationEx.GetUiString("dialog_message_uninstall", Thread.CurrentThread.CurrentCulture),
                LocalizationEx.GetUiString("dialog_uninstall_title", Thread.CurrentThread.CurrentCulture),
                MessageBoxButton.YesNo, BoxType.Default);

            if (result == MessageBoxResult.Yes)
            {
                IsUninstallingServices = true;
                await Task.Run(() =>
                {
                    PrimaryDnsCryptProxyManager.Uninstall();
                    SecondaryDnsCryptProxyManager.Uninstall();
                }).ConfigureAwait(false);

                Thread.Sleep(Global.ServiceUninstallTime);
                IsUninstallingServices = false;
            }

            _isPrimaryResolverRunning = PrimaryDnsCryptProxyManager.IsDnsCryptProxyRunning();
            NotifyOfPropertyChange(() => IsPrimaryResolverRunning);
            _isSecondaryResolverRunning = SecondaryDnsCryptProxyManager.IsDnsCryptProxyRunning();
            NotifyOfPropertyChange(() => IsSecondaryResolverRunning);

            // recover the network interfaces (also the hidden and down cards)
            foreach (var nic in LocalNetworkInterfaceManager.GetLocalNetworkInterfaces(true, false))
            {
                if (!nic.UseDnsCrypt)
                {
                    continue;
                }
                var status = LocalNetworkInterfaceManager.SetNameservers(nic, new List <string>(), NetworkInterfaceComponent.IPv4);
                var card   = _localNetworkInterfaces.SingleOrDefault(n => n.Description.Equals(nic.Description));
                if (card != null)
                {
                    card.UseDnsCrypt = !status;
                }
            }
        }
        private bool HandleNetworkInterfaces(bool enable = true)
        {
            var succedded = true;

            try
            {
                var listenAddresses = new List <string>(_dnscryptProxyConfiguration.listen_addresses);
                if (listenAddresses.Count > 0)
                {
                    var localNetworkInterfaces = LocalNetworkInterfaceManager.GetLocalNetworkInterfaces(listenAddresses);
                    if (localNetworkInterfaces.Count > 0)
                    {
                        foreach (var localNetworkInterface in localNetworkInterfaces)
                        {
                            if (enable)
                            {
                                if (!localNetworkInterface.UseDnsCrypt)
                                {
                                    if (LocalNetworkInterfaceManager.SetNameservers(localNetworkInterface, LocalNetworkInterfaceManager.ConvertToDnsList(listenAddresses)))
                                    {
                                        _logger.Log($"set DNS for {localNetworkInterface.Name} succedded", Category.Info, Priority.Medium);
                                    }
                                    else
                                    {
                                        _logger.Log($"failed to unset DNS for {localNetworkInterface.Name}", Category.Warn, Priority.High);
                                        succedded = false;
                                    }
                                }
                            }
                            else
                            {
                                if (localNetworkInterface.UseDnsCrypt)
                                {
                                    if (LocalNetworkInterfaceManager.UnsetNameservers(localNetworkInterface))
                                    {
                                        _logger.Log($"unset DNS for {localNetworkInterface.Name} succedded", Category.Info, Priority.Medium);
                                    }
                                    else
                                    {
                                        _logger.Log($"failed to unset DNS for {localNetworkInterface.Name}", Category.Warn, Priority.High);
                                        succedded = false;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        _logger.Log($"there are no network interfaces for configuration", Category.Warn, Priority.High);
                        succedded = false;
                    }
                }
                else
                {
                    _logger.Log($"missing listen_addresses in dnscrypt-proxy configuration", Category.Warn, Priority.High);
                    succedded = false;
                }
            }
            catch (Exception exception)
            {
                _logger.Log($"HandleNetworkInterfaces {exception.Message}", Category.Exception, Priority.High);
                succedded = false;
            }
            return(succedded);
        }