diff --git a/Source/NETworkManager.Models/Network/SNTPLookup.cs b/Source/NETworkManager.Models/Network/SNTPLookup.cs index 6f6b8d351c..2157c5ffe6 100644 --- a/Source/NETworkManager.Models/Network/SNTPLookup.cs +++ b/Source/NETworkManager.Models/Network/SNTPLookup.cs @@ -1,10 +1,9 @@ -using System; +using NETworkManager.Utilities; +using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; -using System.Text.RegularExpressions; using System.Threading.Tasks; -using NETworkManager.Utilities; namespace NETworkManager.Models.Network; @@ -102,10 +101,9 @@ public void QueryAsync(IEnumerable servers, bool dnsResolv // NTP requires an IP address to connect to IPAddress serverIP = null; - if (Regex.IsMatch(server.Server, RegexHelper.IPv4AddressRegex) || - Regex.IsMatch(server.Server, RegexHelper.IPv6AddressRegex)) + if (IPAddress.TryParse(server.Server, out var address) && address.AddressFamily is AddressFamily.InterNetwork or AddressFamily.InterNetworkV6) { - serverIP = IPAddress.Parse(server.Server); + serverIP = address; } else { diff --git a/Source/NETworkManager.Validators/IPAddressOrHostnameAsRangeValidator.cs b/Source/NETworkManager.Validators/IPAddressOrHostnameAsRangeValidator.cs index 8392c450dc..8d9a8742ca 100644 --- a/Source/NETworkManager.Validators/IPAddressOrHostnameAsRangeValidator.cs +++ b/Source/NETworkManager.Validators/IPAddressOrHostnameAsRangeValidator.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Net; using System.Text.RegularExpressions; using System.Windows.Controls; using NETworkManager.Localization.Resources; @@ -19,11 +20,10 @@ public override ValidationResult Validate(object value, CultureInfo cultureInfo) { var localItem = item.Trim(); - // Check if it is a valid IPv4 address like 192.168.0.1, a valid IPv6 address like ::1 or a valid hostname like server-01 or server-01.example.com - var isValid = Regex.IsMatch(localItem, RegexHelper.IPv4AddressRegex) || - Regex.IsMatch(localItem, RegexHelper.IPv6AddressRegex) || + // Check if it is a valid IPv4 address like 192.168.0.1, a valid IPv6 address like "::1" or a valid hostname like "server-01" or "server-01.example.com" + var isValid = (IPAddress.TryParse(localItem, out var ipAddress) && ipAddress.AddressFamily is System.Net.Sockets.AddressFamily.InterNetwork or System.Net.Sockets.AddressFamily.InterNetworkV6) || Regex.IsMatch(localItem, RegexHelper.HostnameOrDomainRegex); - + if (!isValid) return new ValidationResult(false, Strings.EnterValidHostnameOrIPAddress); } diff --git a/Source/NETworkManager.Validators/IPv6AddressValidator.cs b/Source/NETworkManager.Validators/IPv6AddressValidator.cs index 1087fd7eff..2eed34ccb5 100644 --- a/Source/NETworkManager.Validators/IPv6AddressValidator.cs +++ b/Source/NETworkManager.Validators/IPv6AddressValidator.cs @@ -1,5 +1,6 @@ using NETworkManager.Localization.Resources; using System.Globalization; +using System.Net; using System.Net.Sockets; using System.Windows.Controls; @@ -11,7 +12,7 @@ public override ValidationResult Validate(object value, CultureInfo cultureInfo) { var input = (value as string); - if (System.Net.IPAddress.TryParse(input, out var address) && address.AddressFamily == AddressFamily.InterNetworkV6) + if (IPAddress.TryParse(input, out var address) && address.AddressFamily == AddressFamily.InterNetworkV6) return ValidationResult.ValidResult; return new ValidationResult(false, Strings.EnterValidIPv6Address); diff --git a/Source/NETworkManager.Validators/MultipleIPAddressesValidator.cs b/Source/NETworkManager.Validators/MultipleIPAddressesValidator.cs index 9089606473..f9f7b04ef4 100644 --- a/Source/NETworkManager.Validators/MultipleIPAddressesValidator.cs +++ b/Source/NETworkManager.Validators/MultipleIPAddressesValidator.cs @@ -1,8 +1,7 @@ using System.Globalization; -using System.Text.RegularExpressions; +using System.Net; using System.Windows.Controls; using NETworkManager.Localization.Resources; -using NETworkManager.Utilities; namespace NETworkManager.Validators; @@ -10,15 +9,14 @@ public class MultipleIPAddressesValidator : ValidationRule { public override ValidationResult Validate(object value, CultureInfo cultureInfo) { - if (value == null) - return ValidationResult.ValidResult; - - for (var index = 0; index < ((string)value).Split(';').Length; index++) + var ipAddresses = (value as string)?.Split(';'); + + if (ipAddresses == null || ipAddresses.Length == 0) + return new ValidationResult(false, Strings.EnterOneOrMoreValidIPAddresses); + + foreach (var ipAddress in ipAddresses) { - var ipAddress = ((string)value).Split(';')[index]; - - if (!Regex.IsMatch(ipAddress.Trim(), RegexHelper.IPv4AddressRegex) && - !Regex.IsMatch(ipAddress.Trim(), RegexHelper.IPv6AddressRegex)) + if(!(IPAddress.TryParse(ipAddress, out var ip) && ip.AddressFamily is System.Net.Sockets.AddressFamily.InterNetwork or System.Net.Sockets.AddressFamily.InterNetworkV6)) return new ValidationResult(false, Strings.EnterOneOrMoreValidIPAddresses); } diff --git a/Source/NETworkManager/Views/SettingsNetworkView.xaml b/Source/NETworkManager/Views/SettingsNetworkView.xaml index 52dd23a682..54d6f0c534 100644 --- a/Source/NETworkManager/Views/SettingsNetworkView.xaml +++ b/Source/NETworkManager/Views/SettingsNetworkView.xaml @@ -20,6 +20,7 @@ + diff --git a/Source/global.json b/Source/global.json index ddd365c066..73e9d246ce 100644 --- a/Source/global.json +++ b/Source/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.412", + "version": "8.0.411", "rollForward": "latestFeature", "allowPrerelease": false }