diff --git a/PortScanner/TCPChecker.cs b/PortScanner/TCPChecker.cs new file mode 100644 index 0000000..065e40a --- /dev/null +++ b/PortScanner/TCPChecker.cs @@ -0,0 +1,46 @@ +using System.Net; +using System.Net.Sockets; + +namespace IP_port_checker.PortScanner +{ + public class TCPChecker + { + private static async Task IsPortOpen(IPAddress ip, int port) + { + try + { + using var tcp = new TcpClient(); + var task = tcp.ConnectAsync(ip, port); + var timeout = Task.Delay(500); + if (await Task.WhenAny(task, timeout) == task) + { + return true; + } + return false; + } + catch + { + return false; + } + } + + public static async Task ScanPort(IPAddress ip, int stport, int endport) + { + var tasks = new List>(); + + for (int port = stport; port <= endport; port++) + { + tasks.Add(IsPortOpen(ip, port)); + } + + bool[] res = await Task.WhenAll(tasks); + + for (int i = 0; i < res.Length; i++) + if (res[i]) + Console.WriteLine($"[{DateTime.Now:HH:mm.ss.ffff}] Порт {stport + i} открыт"); + + Console.WriteLine(); + } + } +} +//127.0.0.1 \ No newline at end of file