Skip to content

Commit 2f7e062

Browse files
committed
IP-Scanner iprange like 192.168.[0-100,200].1
1 parent 0485f7f commit 2f7e062

5 files changed

Lines changed: 30 additions & 13 deletions

File tree

Source/NETworkManager/Helpers/IPScanRangeHelper.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public static IPAddress[] ConvertIPRangeToIPAddresses(string ipRange, Cancellati
6868
continue;
6969
}
7070

71-
// Convert 192.168.[50-100].1 to 192.168.50.1, 192.168.51.1, 192.168.52.1, etc.
71+
// Convert 192.168.[50-100,200].1 to 192.168.50.1, 192.168.51.1, 192.168.52.1, {..}, 192.168.200.1
7272
if (Regex.IsMatch(ipOrRange, RegexHelper.IPv4AddressSpecialRangeRegex))
7373
{
7474
string[] octets = ipOrRange.Split('.');
@@ -83,11 +83,22 @@ public static IPAddress[] ConvertIPRangeToIPAddresses(string ipRange, Cancellati
8383
// Create a range for each octet
8484
if (Regex.IsMatch(octets[i], RegexHelper.SpecialRangeRegex))
8585
{
86-
string[] rangeNumbers = octets[i].Substring(1, octets[i].Length - 2).Split('-');
87-
88-
for (int j = int.Parse(rangeNumbers[0]); j < (int.Parse(rangeNumbers[1]) + 1); j++)
86+
foreach (string numberOrRange in octets[i].Substring(1, octets[i].Length - 2).Split(','))
8987
{
90-
innerList.Add(j);
88+
// 50-100
89+
if (numberOrRange.Contains("-"))
90+
{
91+
string[] rangeNumbers = numberOrRange.Split('-');
92+
93+
for (int j = int.Parse(rangeNumbers[0]); j < (int.Parse(rangeNumbers[1]) + 1); j++)
94+
{
95+
innerList.Add(j);
96+
}
97+
} // 200
98+
else
99+
{
100+
innerList.Add(int.Parse(numberOrRange));
101+
}
91102
}
92103
}
93104
else

Source/NETworkManager/Helpers/RegexHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static class RegexHelper
2828
public const string IPv4AddressSubnetmaskRegex = @"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(" + SubnetmaskValues + ".0.0.0)|(255." + SubnetmaskValues + ".0.0)|(255.255." + SubnetmaskValues + ".0)|(255.255.255." + SubnetmaskValues + ")$";
2929

3030
// Match a range like [0-255]
31-
public const string SpecialRangeRegex = @"\[(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)-(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]";
31+
public const string SpecialRangeRegex = @"\[((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)-(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))([,]((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)-(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))))*\]";
3232

3333
// Match a IPv4-Address like 192.168.[50-100].1
3434
public const string IPv4AddressSpecialRangeRegex = @"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|" + SpecialRangeRegex + @")\.){3}((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|" + SpecialRangeRegex + @")$";

Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@
348348
<system:String x:Key="String_Watermark_ExampleIPv4Address">192.168.178.55</system:String>
349349
<system:String x:Key="String_Watermark_ExampleSubnetmask">255.255.255.0</system:String>
350350
<system:String x:Key="String_Watermark_HostnameOrIPAddress">Hostname oder IP-Adresse...</system:String>
351-
<system:String x:Key="String_Watermark_EampleIPScanRange">192.168.1.0/24; 192.168.178.1 - 192.168.178.128; 192.168.[0-100].1; 192.168.178.150</system:String>
351+
<system:String x:Key="String_Watermark_EampleIPScanRange">192.168.1.0/24; 192.168.178.1 - 192.168.178.128; 192.168.[178-179].[1,100,150-200]; 192.168.178.150</system:String>
352352
<system:String x:Key="String_Watermark_LocationOfTheImport">Speicherort der Importdatei...</system:String>
353353
<system:String x:Key="String_Watermark_ExampleMACAddressesOrVendor">01:23:45:67:89:AB; 01-23-45; AA11BB; 00F1A2C3D4E5; Intel Corp; Asus</system:String>
354354
<system:String x:Key="String_Watermark_EamplePortScanRange">22; 80; 443; 500 - 999; 8080</system:String>

Source/NETworkManager/Resources/Localization/Resources.en-US.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@
348348
<system:String x:Key="String_Watermark_ExampleIPv4Address">192.168.178.55</system:String>
349349
<system:String x:Key="String_Watermark_ExampleSubnetmask">255.255.255.0</system:String>
350350
<system:String x:Key="String_Watermark_HostnameOrIPAddress">Hostname or IP-Address...</system:String>
351-
<system:String x:Key="String_Watermark_EampleIPScanRange">192.168.1.0/24; 192.168.178.1 - 192.168.178.128; 192.168.[0-100].1; 192.168.178.150</system:String>
351+
<system:String x:Key="String_Watermark_EampleIPScanRange">192.168.1.0/24; 192.168.178.1 - 192.168.178.128; 192.168.[178-179].[1,100,150-200]; 192.168.178.150</system:String>
352352
<system:String x:Key="String_Watermark_LocationOfTheImport">Location of the import file...</system:String>
353353
<system:String x:Key="String_Watermark_ExampleMACAddressesOrVendor">01:23:45:67:89:AB; 01-23-45; AA11BB; 00F1A2C3D4E5; Intel Corp; Asus</system:String>
354354
<system:String x:Key="String_Watermark_EamplePortScanRange">22; 80; 443; 500 - 999; 8080</system:String>

Source/NETworkManager/Validators/IPScanRangeValidator.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,24 @@ public override ValidationResult Validate(object value, CultureInfo cultureInfo)
4848
// Match [50-100]
4949
if (Regex.IsMatch(octet, RegexHelper.SpecialRangeRegex))
5050
{
51-
// [50-100] --> {"50","100"}
52-
string[] rangeNumber = octet.Substring(1, octet.Length - 2).Split('-');
51+
foreach (string numberOrRange in octet.Substring(1, octet.Length - 2).Split(','))
52+
{
53+
if (numberOrRange.Contains("-"))
54+
{
55+
// 50-100 --> {50, 100}
56+
string[] rangeNumber = numberOrRange.Split('-');
5357

54-
if (int.Parse(rangeNumber[0]) > int.Parse(rangeNumber[1]))
55-
isValid = false;
58+
if (int.Parse(rangeNumber[0]) > int.Parse(rangeNumber[1]))
59+
isValid = false;
60+
}
61+
}
5662
}
5763
}
5864

5965
continue;
6066
}
6167

62-
isValid = false;
68+
isValid = false;
6369
}
6470

6571
if (isValid)

0 commit comments

Comments
 (0)