Skip to content

Commit a85fd00

Browse files
committed
Fix: Ping monitor crash when dns not configured
1 parent fdada62 commit a85fd00

File tree

3 files changed

+67
-34
lines changed

3 files changed

+67
-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

0 commit comments

Comments
 (0)