Skip to content

Commit cbc187d

Browse files
authored
Fix: Ping monitor crash when dns not configured (#2876)
* Fix: Ping monitor crash when dns not configured * Docs: #2876
1 parent fdada62 commit cbc187d

File tree

4 files changed

+70
-34
lines changed

4 files changed

+70
-34
lines changed

Source/NETworkManager.Models/Network/Ping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace NETworkManager.Models.Network;
1010

1111
public sealed class Ping
1212
{
13-
#region Varaibles
13+
#region Variables
1414

1515
public int WaitTime = 1000;
1616
public int Timeout = 4000;

Source/NETworkManager.Utilities/DNSClient.cs

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
using System.Collections.Generic;
1+
using DnsClient;
2+
using System;
3+
using System.Collections.Generic;
24
using System.Linq;
35
using System.Net;
46
using System.Threading.Tasks;
5-
using DnsClient;
7+
using log4net;
68

79
namespace NETworkManager.Utilities;
810

911
public class DNSClient : SingletonBase<DNSClient>
1012
{
13+
private static readonly ILog Log = LogManager.GetLogger(typeof(DNSClient));
14+
1115
/// <summary>
1216
/// Error message which is returned when the DNS client is not configured.
1317
/// </summary>
@@ -36,34 +40,41 @@ public void Configure(DNSClientSettings settings)
3640
{
3741
_settings = settings;
3842

43+
Log.Debug("Configuring DNS client...");
44+
3945
if (_settings.UseCustomDNSServers)
4046
{
47+
Log.Debug("Using custom DNS servers...");
48+
4149
// Setup custom DNS servers
42-
List<NameServer> servers = new();
50+
List<NameServer> servers = [];
4351

4452
foreach (var (server, port) in _settings.DNSServers)
53+
{
54+
Log.Debug($"Adding custom DNS server: {server}:{port}");
4555
servers.Add(new IPEndPoint(IPAddress.Parse(server), port));
56+
}
4657

58+
Log.Debug("Creating LookupClient with custom DNS servers...");
4759
_client = new LookupClient(new LookupClientOptions(servers.ToArray()));
4860
}
4961
else
5062
{
51-
UpdateFromWindows();
63+
Log.Debug("Creating LookupClient with Windows default DNS servers...");
64+
_client = new LookupClient();
5265
}
53-
66+
67+
Log.Debug("DNS client configured.");
5468
_isConfigured = true;
5569
}
5670

5771
/// <summary>
5872
/// Method to update the (Windows) name servers of the DNS client
5973
/// when they may have changed due to a network update.
6074
/// </summary>
61-
public void UpdateFromWindows()
75+
public void UpdateWindowsDNSSever()
6276
{
63-
// Default (Windows) settings
64-
if (_settings.UseCustomDNSServers)
65-
return;
66-
77+
Log.Debug("Recreating LookupClient with with Windows default DNS servers...");
6778
_client = new LookupClient();
6879
}
6980

@@ -98,6 +109,11 @@ public async Task<DNSClientResultIPAddress> ResolveAAsync(string query)
98109
{
99110
return new DNSClientResultIPAddress(true, ex.Message);
100111
}
112+
catch (Exception ex)
113+
{
114+
Log.Error($"Error while resolving A record (Query string is \"{query}\".", ex);
115+
return new DNSClientResultIPAddress(true, ex.Message);
116+
}
101117
}
102118

103119
/// <summary>
@@ -131,6 +147,11 @@ public async Task<DNSClientResultIPAddress> ResolveAaaaAsync(string query)
131147
{
132148
return new DNSClientResultIPAddress(true, ex.Message);
133149
}
150+
catch (Exception ex)
151+
{
152+
Log.Error($"Error while resolving AAAA record (Query string is \"{query}\".", ex);
153+
return new DNSClientResultIPAddress(true, ex.Message);
154+
}
134155
}
135156

136157
/// <summary>
@@ -164,6 +185,11 @@ public async Task<DNSClientResultString> ResolveCnameAsync(string query)
164185
{
165186
return new DNSClientResultString(true, ex.Message);
166187
}
188+
catch (Exception ex)
189+
{
190+
Log.Error($"Error while resolving CNAME record (Query string is \"{query}\".", ex);
191+
return new DNSClientResultString(true, ex.Message);
192+
}
167193
}
168194

169195
/// <summary>
@@ -197,5 +223,10 @@ public async Task<DNSClientResultString> ResolvePtrAsync(IPAddress ipAddress)
197223
{
198224
return new DNSClientResultString(true, ex.Message);
199225
}
226+
catch (Exception ex)
227+
{
228+
Log.Error($"Error while resolving PTR record (IP address is \"{ipAddress}\".", ex);
229+
return new DNSClientResultString(true, ex.Message);
230+
}
200231
}
201-
}
232+
}

Source/NETworkManager/MainWindow.xaml.cs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private void SettingsManager_PropertyChanged(object sender, PropertyChangedEvent
7070
// Update DNS server if changed in the settings
7171
case nameof(SettingsInfo.Network_UseCustomDNSServer):
7272
case nameof(SettingsInfo.Network_CustomDNSServer):
73-
ConfigureDNS();
73+
ConfigureDNSServer();
7474

7575
break;
7676

@@ -466,8 +466,8 @@ public MainWindow()
466466
// Load and change appearance
467467
AppearanceManager.Load();
468468

469-
// Load and configure DNS
470-
ConfigureDNS();
469+
// Load and configure DNS server
470+
ConfigureDNSServer();
471471

472472
// Set window title
473473
Title = $"NETworkManager {AssemblyManager.Current.Version}";
@@ -1542,7 +1542,9 @@ private void ProfileManager_OnLoadedProfileFileChangedEvent(object sender, Profi
15421542
private void CheckForUpdates()
15431543
{
15441544
var updater = new Updater();
1545+
15451546
updater.UpdateAvailable += Updater_UpdateAvailable;
1547+
15461548
updater.CheckOnGitHub(Properties.Resources.NETworkManager_GitHub_User,
15471549
Properties.Resources.NETworkManager_GitHub_Repo, AssemblyManager.Current.Version,
15481550
SettingsManager.Current.Update_CheckForPreReleases);
@@ -1873,9 +1875,9 @@ private void BringWindowToFront()
18731875
Activate();
18741876
}
18751877

1876-
private void ConfigureDNS()
1878+
private void ConfigureDNSServer()
18771879
{
1878-
Log.Info("Configure application DNS...");
1880+
Log.Info("Configure application DNS servers...");
18791881

18801882
DNSClientSettings dnsSettings = new();
18811883

@@ -1885,41 +1887,33 @@ private void ConfigureDNS()
18851887
{
18861888
Log.Info($"Use custom DNS servers ({SettingsManager.Current.Network_CustomDNSServer})...");
18871889

1888-
List<(string Server, int Port)> dnsServers = new();
1889-
1890-
foreach (var dnsServer in SettingsManager.Current.Network_CustomDNSServer.Split(";"))
1891-
dnsServers.Add((dnsServer, 53));
1890+
List<(string Server, int Port)> dnsServers = SettingsManager.Current.Network_CustomDNSServer.Split(";")
1891+
.Select(dnsServer => (dnsServer, 53))
1892+
.ToList();
18921893

18931894
dnsSettings.UseCustomDNSServers = true;
18941895
dnsSettings.DNSServers = dnsServers;
18951896
}
18961897
else
18971898
{
18981899
Log.Info(
1899-
$"Custom DNS servers could not be set (Setting \"{nameof(SettingsManager.Current.Network_CustomDNSServer)}\" has value \"{SettingsManager.Current.Network_CustomDNSServer}\")! Fallback to Windows DNS servers...");
1900+
$"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...");
19001901
}
19011902
}
19021903
else
19031904
{
1904-
Log.Info("Use Windows DNS servers...");
1905+
Log.Info("Use Windows default DNS servers...");
19051906
}
19061907

19071908
DNSClient.GetInstance().Configure(dnsSettings);
19081909
}
19091910

1910-
private void UpdateDNS()
1911-
{
1912-
Log.Info("Update Windows DNS servers...");
1913-
1914-
DNSClient.GetInstance().UpdateFromWindows();
1915-
}
1916-
19171911
private void WriteDefaultPowerShellProfileToRegistry()
19181912
{
19191913
if (!SettingsManager.Current.Appearance_PowerShellModifyGlobalProfile)
19201914
return;
19211915

1922-
HashSet<string> paths = new();
1916+
HashSet<string> paths = [];
19231917

19241918
// PowerShell
19251919
if (!string.IsNullOrEmpty(SettingsManager.Current.PowerShell_ApplicationFilePath) &&
@@ -1958,12 +1952,20 @@ private async void OnNetworkHasChanged()
19581952

19591953
// Update DNS server if network changed
19601954
if (!SettingsManager.Current.Network_UseCustomDNSServer)
1961-
UpdateDNS();
1955+
{
1956+
Log.Info("Update Windows default DNS servers...");
1957+
DNSClient.GetInstance().UpdateWindowsDNSSever();
1958+
}
19621959

19631960
// Show status window on network change
19641961
if (SettingsManager.Current.Status_ShowWindowOnNetworkChange)
1965-
await Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate { OpenStatusWindow(true); }));
1966-
1962+
{
1963+
await Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate
1964+
{
1965+
OpenStatusWindow(true);
1966+
}));
1967+
}
1968+
19671969
_isNetworkChanging = false;
19681970
}
19691971

Website/docs/changelog/next-release.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ Release date: **xx.xx.2024**
3030

3131
## Bugfixes
3232

33+
- **Ping Monitor**
34+
- 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)
35+
3336
- TextBox content not centered because of ScrollViewer issue. [#2763](https://github.com/BornToBeRoot/NETworkManager/pull/2763)
3437

3538
## Dependencies, Refactoring & Documentation

0 commit comments

Comments
 (0)