54 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|