Skip to content

Commit a588f5e

Browse files
authored
Feature: Add DNS > PreferIPv4 as global setting (BornToBeRoot#1989)
* Feature: Add DNS\PreferIPv4 as global setting * Docs: Add BornToBeRoot#1950
1 parent 5386e13 commit a588f5e

24 files changed

Lines changed: 114 additions & 203 deletions

Source/NETworkManager.Models/Network/HostRangeHelper.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NETworkManager.Utilities;
1+
using Amazon.Util.Internal;
2+
using NETworkManager.Utilities;
23
using System;
34
using System.Collections.Concurrent;
45
using System.Collections.Generic;
@@ -124,12 +125,12 @@ public static IPAddress[] CreateIPAddressesFromIPRanges(string[] ipRanges, Cance
124125
return bag.ToArray();
125126
}
126127

127-
public static Task<List<string>> ResolveHostnamesInIPRangesAsync(string[] ipRanges, CancellationToken cancellationToken)
128+
public static Task<List<string>> ResolveHostnamesInIPRangesAsync(string[] ipRanges, bool dnsResolveHostnamePreferIPv4, CancellationToken cancellationToken)
128129
{
129-
return Task.Run(() => ResolveHostnamesInIPRanges(ipRanges, cancellationToken), cancellationToken);
130+
return Task.Run(() => ResolveHostnamesInIPRanges(ipRanges, dnsResolveHostnamePreferIPv4, cancellationToken), cancellationToken);
130131
}
131132

132-
public static List<string> ResolveHostnamesInIPRanges(string[] ipRanges, CancellationToken cancellationToken)
133+
public static List<string> ResolveHostnamesInIPRanges(string[] ipRanges, bool dnsResolveHostnamePreferIPv4, CancellationToken cancellationToken)
133134
{
134135
var bag = new ConcurrentBag<string>();
135136

@@ -153,10 +154,10 @@ public static List<string> ResolveHostnamesInIPRanges(string[] ipRanges, Cancell
153154
case var _ when Regex.IsMatch(ipHostOrRange, RegexHelper.IPv6AddressRegex):
154155
bag.Add(ipHostOrRange);
155156
break;
156-
157+
157158
// example.com
158159
case var _ when Regex.IsMatch(ipHostOrRange, RegexHelper.HostnameRegex):
159-
using (var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(ipHostOrRange))
160+
using (var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(ipHostOrRange, dnsResolveHostnamePreferIPv4))
160161
{
161162
// Wait for task inside a Parallel.Foreach
162163
dnsResolverTask.Wait();
@@ -173,7 +174,8 @@ public static List<string> ResolveHostnamesInIPRanges(string[] ipRanges, Cancell
173174
case var _ when Regex.IsMatch(ipHostOrRange, RegexHelper.HostnameCidrRegex) || Regex.IsMatch(ipHostOrRange, RegexHelper.HostnameSubnetmaskRegex):
174175
var hostAndSubnet = ipHostOrRange.Split('/');
175176

176-
using (var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(hostAndSubnet[0]))
177+
// Only support IPv4
178+
using (var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(hostAndSubnet[0], true))
177179
{
178180
// Wait for task inside a Parallel.Foreach
179181
dnsResolverTask.Wait();

Source/NETworkManager.Models/Network/SNTPLookup.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NETworkManager.Utilities;
1+
using Amazon.Util.Internal;
2+
using NETworkManager.Utilities;
23
using System;
34
using System.Collections.Generic;
45
using System.Net;
@@ -84,7 +85,7 @@ public static SNTPDateTime GetNetworkTimeRfc2030(IPEndPoint server, int timeout
8485
};
8586
}
8687

87-
public void QueryAsync(IEnumerable<ServerConnectionInfo> servers)
88+
public void QueryAsync(IEnumerable<ServerConnectionInfo> servers, bool dnsResolveHostnamePreferIPv4)
8889
{
8990
Task.Run(() =>
9091
{
@@ -99,7 +100,7 @@ public void QueryAsync(IEnumerable<ServerConnectionInfo> servers)
99100
}
100101
else
101102
{
102-
using var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(server.Server, true);
103+
using var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(server.Server, dnsResolveHostnamePreferIPv4);
103104

104105
// Wait for task inside a Parallel.Foreach
105106
dnsResolverTask.Wait();

Source/NETworkManager.Settings/GlobalStaticConfiguration.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ public static class GlobalStaticConfiguration
3232
public static bool SplashScreen_Enabled => true;
3333
public static string Appearance_Theme => "Dark";
3434
public static string Appearance_Accent => "Lime";
35-
public static bool Appearance_UseCustomTheme => false;
35+
public static bool Appearance_UseCustomTheme => false;
36+
37+
public static bool Network_ResolveHostnamePreferIPv4 => true;
3638
public static bool Status_ShowWindowOnNetworkChange => true;
3739
public static int Status_WindowCloseTime => 10;
3840
public static string Status_IPAddressToDetectLocalIPAddressBasedOnRouting => "1.1.1.1";

Source/NETworkManager.Settings/SettingsInfo.cs

Lines changed: 19 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,22 @@ public string Network_CustomDNSServer
339339
SettingsChanged = true;
340340
}
341341
}
342-
342+
343+
private bool _network_ResolveHostnamePreferIPv4 = GlobalStaticConfiguration.Network_ResolveHostnamePreferIPv4;
344+
public bool Network_ResolveHostnamePreferIPv4
345+
{
346+
get => _network_ResolveHostnamePreferIPv4;
347+
set
348+
{
349+
if (value == _network_ResolveHostnamePreferIPv4)
350+
return;
351+
352+
_network_ResolveHostnamePreferIPv4 = value;
353+
OnPropertyChanged();
354+
SettingsChanged = true;
355+
}
356+
}
357+
343358
// Status
344359
private bool _status_ShowWindowOnNetworkChange = GlobalStaticConfiguration.Status_ShowWindowOnNetworkChange;
345360
public bool Status_ShowWindowOnNetworkChange
@@ -1273,22 +1288,7 @@ public int PingMonitor_WaitTime
12731288
SettingsChanged = true;
12741289
}
12751290
}
1276-
1277-
private bool _pingMonitor_ResolveHostnamePreferIPv4 = true;
1278-
public bool PingMonitor_ResolveHostnamePreferIPv4
1279-
{
1280-
get => _pingMonitor_ResolveHostnamePreferIPv4;
1281-
set
1282-
{
1283-
if (value == _pingMonitor_ResolveHostnamePreferIPv4)
1284-
return;
1285-
1286-
_pingMonitor_ResolveHostnamePreferIPv4 = value;
1287-
OnPropertyChanged();
1288-
SettingsChanged = true;
1289-
}
1290-
}
1291-
1291+
12921292
private string _pingMonitor_ExportFilePath;
12931293
public string PingMonitor_ExportFilePath
12941294
{
@@ -1424,22 +1424,7 @@ public bool Traceroute_ResolveHostname
14241424
OnPropertyChanged();
14251425
SettingsChanged = true;
14261426
}
1427-
}
1428-
1429-
private bool _traceroute_ResolveHostnamePreferIPv4 = true;
1430-
public bool Traceroute_ResolveHostnamePreferIPv4
1431-
{
1432-
get => _traceroute_ResolveHostnamePreferIPv4;
1433-
set
1434-
{
1435-
if (value == _traceroute_ResolveHostnamePreferIPv4)
1436-
return;
1437-
1438-
_traceroute_ResolveHostnamePreferIPv4 = value;
1439-
OnPropertyChanged();
1440-
SettingsChanged = true;
1441-
}
1442-
}
1427+
}
14431428

14441429
private bool _traceroute_ExpandProfileView = true;
14451430
public bool Traceroute_ExpandProfileView
@@ -3106,22 +3091,7 @@ public int SNMP_Port
31063091
SettingsChanged = true;
31073092
}
31083093
}
3109-
3110-
private bool _snmp_ResolveHostnamePreferIPv4 = true;
3111-
public bool SNMP_ResolveHostnamePreferIPv4
3112-
{
3113-
get => _snmp_ResolveHostnamePreferIPv4;
3114-
set
3115-
{
3116-
if (value == _snmp_ResolveHostnamePreferIPv4)
3117-
return;
3118-
3119-
_snmp_ResolveHostnamePreferIPv4 = value;
3120-
OnPropertyChanged();
3121-
SettingsChanged = true;
3122-
}
3123-
}
3124-
3094+
31253095
private ObservableCollection<string> _snmp_HostHistory = new();
31263096
public ObservableCollection<string> SNMP_HostHistory
31273097
{

Source/NETworkManager.Utilities/DNSClientHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace NETworkManager.Utilities;
44

55
public static class DNSClientHelper
66
{
7-
public static async Task<DNSClientResultIPAddress> ResolveAorAaaaAsync(string query, bool preferIPv4 = true)
7+
public static async Task<DNSClientResultIPAddress> ResolveAorAaaaAsync(string query, bool preferIPv4)
88
{
99
DNSClientResultIPAddress firstResult = null;
1010

Source/NETworkManager/ViewModels/IPScannerViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ private async Task StartScan()
451451

452452
try
453453
{
454-
ipRanges = await HostRangeHelper.ResolveHostnamesInIPRangesAsync(Hosts.Replace(" ", "").Split(';'), _cancellationTokenSource.Token);
454+
ipRanges = await HostRangeHelper.ResolveHostnamesInIPRangesAsync(Hosts.Replace(" ", "").Split(';'), SettingsManager.Current.Network_ResolveHostnamePreferIPv4, _cancellationTokenSource.Token);
455455
}
456456
catch (OperationCanceledException)
457457
{

Source/NETworkManager/ViewModels/PingMonitorHostViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ public void AddHost(string hosts)
367367
{
368368
hostname = host;
369369

370-
using var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(host, SettingsManager.Current.PingMonitor_ResolveHostnamePreferIPv4);
370+
using var dnsResolverTask = DNSClientHelper.ResolveAorAaaaAsync(host, SettingsManager.Current.Network_ResolveHostnamePreferIPv4);
371371

372372
// Wait for task inside a Parallel.Foreach
373373
dnsResolverTask.Wait();

Source/NETworkManager/ViewModels/PingMonitorSettingsViewModel.cs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -91,38 +91,6 @@ public int WaitTime
9191
OnPropertyChanged();
9292
}
9393
}
94-
95-
96-
private bool _resolveHostnamePreferIPv4;
97-
public bool ResolveHostnamePreferIPv4
98-
{
99-
get => _resolveHostnamePreferIPv4;
100-
set
101-
{
102-
if (value == _resolveHostnamePreferIPv4)
103-
return;
104-
105-
if (!_isLoading)
106-
SettingsManager.Current.PingMonitor_ResolveHostnamePreferIPv4 = value;
107-
108-
_resolveHostnamePreferIPv4 = value;
109-
OnPropertyChanged();
110-
}
111-
}
112-
113-
private bool _resolveHostnamePreferIPv6;
114-
public bool ResolveHostnamePreferIPv6
115-
{
116-
get => _resolveHostnamePreferIPv6;
117-
set
118-
{
119-
if (value == _resolveHostnamePreferIPv6)
120-
return;
121-
122-
_resolveHostnamePreferIPv6 = value;
123-
OnPropertyChanged();
124-
}
125-
}
12694
#endregion
12795

12896
#region Contructor, load settings
@@ -142,11 +110,6 @@ private void LoadSettings()
142110
TTL = SettingsManager.Current.PingMonitor_TTL;
143111
DontFragment = SettingsManager.Current.PingMonitor_DontFragment;
144112
WaitTime = SettingsManager.Current.PingMonitor_WaitTime;
145-
146-
if (SettingsManager.Current.PingMonitor_ResolveHostnamePreferIPv4)
147-
ResolveHostnamePreferIPv4 = true;
148-
else
149-
ResolveHostnamePreferIPv6 = true;
150113
}
151114
#endregion
152115
}

Source/NETworkManager/ViewModels/PortScannerViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ private async Task OpenPortProfileSelection()
358358
{
359359
_dialogCoordinator.HideMetroDialogAsync(this, customDialog);
360360

361-
Ports = string.Join("; " , instance.GetSelectedPortProfiles().Select(x => x.Ports));
361+
Ports = string.Join("; ", instance.GetSelectedPortProfiles().Select(x => x.Ports));
362362
}, instance =>
363363
{
364364
_dialogCoordinator.HideMetroDialogAsync(this, customDialog);
@@ -402,7 +402,7 @@ private async Task StartScan()
402402

403403
try
404404
{
405-
ipRanges = await HostRangeHelper.ResolveHostnamesInIPRangesAsync(Hosts.Replace(" ", "").Split(';'), _cancellationTokenSource.Token);
405+
ipRanges = await HostRangeHelper.ResolveHostnamesInIPRangesAsync(Hosts.Replace(" ", "").Split(';'), SettingsManager.Current.Network_ResolveHostnamePreferIPv4, _cancellationTokenSource.Token);
406406
}
407407
catch (OperationCanceledException)
408408
{

Source/NETworkManager/ViewModels/ProfileViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2437,7 +2437,7 @@ private async System.Threading.Tasks.Task ResolveHostActionAsync()
24372437
{
24382438
IsResolveHostnameRunning = true;
24392439

2440-
var dnsResult = await DNSClientHelper.ResolveAorAaaaAsync(Host);
2440+
var dnsResult = await DNSClientHelper.ResolveAorAaaaAsync(Host, SettingsManager.Current.Network_ResolveHostnamePreferIPv4);
24412441

24422442
if (!dnsResult.HasError)
24432443
Host = dnsResult.Value.ToString();

0 commit comments

Comments
 (0)