diff --git a/SubnetScanner/SubnetValid.cs b/SubnetScanner/SubnetValid.cs new file mode 100644 index 0000000..05c158a --- /dev/null +++ b/SubnetScanner/SubnetValid.cs @@ -0,0 +1,53 @@ +using Spectre.Console; + +namespace IP_port_checker.SubnetScanner +{ + public class SubnetValid + { + public static string SubValid(string promt, ref string IP, ref int Mask) + { + while (true) + { + Console.Write(promt); + + string? cidr = Console.ReadLine(); + + //провека на пустой ввод или на содержание слеша + if (string.IsNullOrEmpty(cidr) || !cidr.Contains('/')) + { + AnsiConsole.MarkupLine("[red]Ошибка: нужен формат IP/маска[/]"); + continue; + } + + string[] parts = cidr.Split('/'); + + //кол-во частей подсети после сплита + if (parts.Length != 2) + { + AnsiConsole.MarkupLine("[red]Неверный формат [/]"); + continue; + } + + //проверка на числовое значение и ограничения маски + if (!int.TryParse(parts[1], out int mask) || mask != 24) + { + AnsiConsole.MarkupLine("[red]Маска должна быть числом 24 (в ходе разработки добавятся другие маски)[/]"); + continue; + } + + //проверка айпи + string[] parts1 = parts[0].Split('.'); + bool IPv4Valid = parts1.Length == 4 && parts1.All(p => byte.TryParse(p, out _)); + if (!IPv4Valid) + { + AnsiConsole.MarkupLine("[red]Неверный IP [/]"); + continue; + } + + IP = parts[0]; + Mask = Convert.ToInt32(parts[1]); + return cidr; + } + } + } +}