Files

54 lines
1.9 KiB
C#

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;
}
}
}
}