C # - Сканирование портов с диапазонами IP-адресов - PullRequest
0 голосов
/ 29 сентября 2018

У меня проблема с моим кодом, он работает очень медленно

Мой код:

private static void PortRangeScan()
{
    Console.Clear();
    var From = FROM.Split('.'); // example (103.218.27.85)
    string From1 = From[0];
    string From2 = From[1];
    string From3 = From[2];
    string From4 = From[3];

    var To = TO.Split('.'); // example (123.218.27.85)
    string To1 = To[0];
    string To2 = To[1];
    string To3 = To[2];
    string To4 = To[3];

    for (int CurrentProxy = int.Parse(From1); CurrentProxy <= int.Parse(To1); CurrentProxy++)
    {
        foreach (int s in Ports)
        {
            TcpClient Scan = new TcpClient();
            try
            {
                // If there is no exception then the Port is open
                Scan.Connect($"{CurrentProxy}.{From2}.{From3}.{From4}", s);
                Console.WriteLine($"[{CurrentProxy}.{From2}.{From3}.{From4}] | [{s}] | OPEN", Color.Green);
            }
            catch
            {
                // If there is an excpetion then it means the Port is closed
                Console.WriteLine($"[{CurrentProxy}.{From2}.{From3}.{From4}] | [{s}] | CLOSED", Color.Red);
            }
        }
    }
}

этот код работает очень медленно, если порт закрыт, он может занять до10 секунд, пока он не проверит следующий порт.

Я хотел добавить цикл Parallel.For или многопоточность, но я не уверен, как мне это сделать с этим кодом.Итак, что мне нужно:

как я могу сделать этот код намного быстрее или как добавить многопоточность

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете использовать пространство имен System.Net.Network Information.В частности, класс свойств IPGlobal.Его можно использовать для возврата полного списка используемых в данный момент портов.

Извините за форматирование.Я на мобильном телефоне, но вот пример.

var ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); 
var tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
foreach (var tcpi in tcpConnInfoArray)
{
  Console.Write($"Port {tcpi.LocalEndPoint.Port} is in use.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...