From b7845f1c065b7f1d40a1078e110b783817a0734a Mon Sep 17 00:00:00 2001 From: SwEdryG Date: Wed, 10 Jun 2026 23:21:42 +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=20PortScanner/TCPChecker.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Я восхищаюсь Kolo. Вот с таких людей надо брать пример --- PortScanner/TCPChecker.cs | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 PortScanner/TCPChecker.cs 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