diff --git a/Source/NETworkManager.Models/Network/Ping.cs b/Source/NETworkManager.Models/Network/Ping.cs index 574ddf4be3..ccf645bb0c 100644 --- a/Source/NETworkManager.Models/Network/Ping.cs +++ b/Source/NETworkManager.Models/Network/Ping.cs @@ -10,7 +10,7 @@ namespace NETworkManager.Models.Network; public sealed class Ping { - #region Varaibles + #region Variables public int WaitTime = 1000; public int Timeout = 4000; diff --git a/Source/NETworkManager.Utilities/DNSClient.cs b/Source/NETworkManager.Utilities/DNSClient.cs index 4684742db9..cd9b7d0af1 100644 --- a/Source/NETworkManager.Utilities/DNSClient.cs +++ b/Source/NETworkManager.Utilities/DNSClient.cs @@ -1,13 +1,17 @@ -using System.Collections.Generic; +using DnsClient; +using System; +using System.Collections.Generic; using System.Linq; using System.Net; using System.Threading.Tasks; -using DnsClient; +using log4net; namespace NETworkManager.Utilities; public class DNSClient : SingletonBase { + private static readonly ILog Log = LogManager.GetLogger(typeof(DNSClient)); + /// /// Error message which is returned when the DNS client is not configured. /// @@ -36,21 +40,31 @@ public void Configure(DNSClientSettings settings) { _settings = settings; + Log.Debug("Configuring DNS client..."); + if (_settings.UseCustomDNSServers) { + Log.Debug("Using custom DNS servers..."); + // Setup custom DNS servers - List servers = new(); + List servers = []; foreach (var (server, port) in _settings.DNSServers) + { + Log.Debug($"Adding custom DNS server: {server}:{port}"); servers.Add(new IPEndPoint(IPAddress.Parse(server), port)); + } + Log.Debug("Creating LookupClient with custom DNS servers..."); _client = new LookupClient(new LookupClientOptions(servers.ToArray())); } else { - UpdateFromWindows(); + Log.Debug("Creating LookupClient with Windows default DNS servers..."); + _client = new LookupClient(); } - + + Log.Debug("DNS client configured."); _isConfigured = true; } @@ -58,12 +72,9 @@ public void Configure(DNSClientSettings settings) /// Method to update the (Windows) name servers of the DNS client /// when they may have changed due to a network update. /// - public void UpdateFromWindows() + public void UpdateWindowsDNSSever() { - // Default (Windows) settings - if (_settings.UseCustomDNSServers) - return; - + Log.Debug("Recreating LookupClient with with Windows default DNS servers..."); _client = new LookupClient(); } @@ -98,6 +109,11 @@ public async Task ResolveAAsync(string query) { return new DNSClientResultIPAddress(true, ex.Message); } + catch (Exception ex) + { + Log.Error($"Error while resolving A record (Query string is \"{query}\".", ex); + return new DNSClientResultIPAddress(true, ex.Message); + } } /// @@ -131,6 +147,11 @@ public async Task ResolveAaaaAsync(string query) { return new DNSClientResultIPAddress(true, ex.Message); } + catch (Exception ex) + { + Log.Error($"Error while resolving AAAA record (Query string is \"{query}\".", ex); + return new DNSClientResultIPAddress(true, ex.Message); + } } /// @@ -164,6 +185,11 @@ public async Task ResolveCnameAsync(string query) { return new DNSClientResultString(true, ex.Message); } + catch (Exception ex) + { + Log.Error($"Error while resolving CNAME record (Query string is \"{query}\".", ex); + return new DNSClientResultString(true, ex.Message); + } } /// @@ -197,5 +223,10 @@ public async Task ResolvePtrAsync(IPAddress ipAddress) { return new DNSClientResultString(true, ex.Message); } + catch (Exception ex) + { + Log.Error($"Error while resolving PTR record (IP address is \"{ipAddress}\".", ex); + return new DNSClientResultString(true, ex.Message); + } } -} \ No newline at end of file +} diff --git a/Source/NETworkManager/MainWindow.xaml.cs b/Source/NETworkManager/MainWindow.xaml.cs index ffcc5ed7bd..32753975bf 100644 --- a/Source/NETworkManager/MainWindow.xaml.cs +++ b/Source/NETworkManager/MainWindow.xaml.cs @@ -70,7 +70,7 @@ private void SettingsManager_PropertyChanged(object sender, PropertyChangedEvent // Update DNS server if changed in the settings case nameof(SettingsInfo.Network_UseCustomDNSServer): case nameof(SettingsInfo.Network_CustomDNSServer): - ConfigureDNS(); + ConfigureDNSServer(); break; @@ -466,8 +466,8 @@ public MainWindow() // Load and change appearance AppearanceManager.Load(); - // Load and configure DNS - ConfigureDNS(); + // Load and configure DNS server + ConfigureDNSServer(); // Set window title Title = $"NETworkManager {AssemblyManager.Current.Version}"; @@ -1542,7 +1542,9 @@ private void ProfileManager_OnLoadedProfileFileChangedEvent(object sender, Profi private void CheckForUpdates() { var updater = new Updater(); + updater.UpdateAvailable += Updater_UpdateAvailable; + updater.CheckOnGitHub(Properties.Resources.NETworkManager_GitHub_User, Properties.Resources.NETworkManager_GitHub_Repo, AssemblyManager.Current.Version, SettingsManager.Current.Update_CheckForPreReleases); @@ -1873,9 +1875,9 @@ private void BringWindowToFront() Activate(); } - private void ConfigureDNS() + private void ConfigureDNSServer() { - Log.Info("Configure application DNS..."); + Log.Info("Configure application DNS servers..."); DNSClientSettings dnsSettings = new(); @@ -1885,10 +1887,9 @@ private void ConfigureDNS() { Log.Info($"Use custom DNS servers ({SettingsManager.Current.Network_CustomDNSServer})..."); - List<(string Server, int Port)> dnsServers = new(); - - foreach (var dnsServer in SettingsManager.Current.Network_CustomDNSServer.Split(";")) - dnsServers.Add((dnsServer, 53)); + List<(string Server, int Port)> dnsServers = SettingsManager.Current.Network_CustomDNSServer.Split(";") + .Select(dnsServer => (dnsServer, 53)) + .ToList(); dnsSettings.UseCustomDNSServers = true; dnsSettings.DNSServers = dnsServers; @@ -1896,30 +1897,23 @@ private void ConfigureDNS() else { Log.Info( - $"Custom DNS servers could not be set (Setting \"{nameof(SettingsManager.Current.Network_CustomDNSServer)}\" has value \"{SettingsManager.Current.Network_CustomDNSServer}\")! Fallback to Windows DNS servers..."); + $"Custom DNS servers could not be set (Setting \"{nameof(SettingsManager.Current.Network_CustomDNSServer)}\" has value \"{SettingsManager.Current.Network_CustomDNSServer}\")! Fallback to Windows default DNS servers..."); } } else { - Log.Info("Use Windows DNS servers..."); + Log.Info("Use Windows default DNS servers..."); } DNSClient.GetInstance().Configure(dnsSettings); } - private void UpdateDNS() - { - Log.Info("Update Windows DNS servers..."); - - DNSClient.GetInstance().UpdateFromWindows(); - } - private void WriteDefaultPowerShellProfileToRegistry() { if (!SettingsManager.Current.Appearance_PowerShellModifyGlobalProfile) return; - HashSet paths = new(); + HashSet paths = []; // PowerShell if (!string.IsNullOrEmpty(SettingsManager.Current.PowerShell_ApplicationFilePath) && @@ -1958,12 +1952,20 @@ private async void OnNetworkHasChanged() // Update DNS server if network changed if (!SettingsManager.Current.Network_UseCustomDNSServer) - UpdateDNS(); + { + Log.Info("Update Windows default DNS servers..."); + DNSClient.GetInstance().UpdateWindowsDNSSever(); + } // Show status window on network change if (SettingsManager.Current.Status_ShowWindowOnNetworkChange) - await Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate { OpenStatusWindow(true); })); - + { + await Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate + { + OpenStatusWindow(true); + })); + } + _isNetworkChanging = false; } diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md index 48819ec39c..a0e0a23dc4 100644 --- a/Website/docs/changelog/next-release.md +++ b/Website/docs/changelog/next-release.md @@ -30,6 +30,9 @@ Release date: **xx.xx.2024** ## Bugfixes +- **Ping Monitor** + - A problem has been fixed where the ping does not start if the DNS server is not configured. This can occur if the network interface via which the Windows DNS server was configured is deactivated/disconnected. [#2876](https://github.com/BornToBeRoot/NETworkManager/pull/2876) + - TextBox content not centered because of ScrollViewer issue. [#2763](https://github.com/BornToBeRoot/NETworkManager/pull/2763) ## Dependencies, Refactoring & Documentation