From 65f0fe851818c0e5daa416f9d5caba5725b1e60a Mon Sep 17 00:00:00 2001 From: SwEdryG Date: Wed, 10 Jun 2026 23:24:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20SubnetScanner/SubnetValid.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SubnetScanner/SubnetValid.cs | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 SubnetScanner/SubnetValid.cs 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; + } + } + } +}