Невозможно прослушивать определенные порты Windows 10 - PullRequest
0 голосов
/ 17 октября 2019

Я обнаружил, что на моем компьютере с Windows 10 имеется несколько портов, которые (1) не используются каким-либо процессом и (2) я не могу прослушивать.

Я обнаружил эту проблемупытаясь запустить сервер узла, который использовал порт 3000. Я нашел ряд вопросов на эту тему. Это типично: Node.js Порт 3000 уже используется, но на самом деле это не так?

Все респонденты этого вопроса и аналогичные вопросы предлагают использовать "netstat -ano" длянайдите процесс, который использует порт и убивает его.

Я обнаружил, что заблокировано большое количество портов, которые не привязаны к процессам. Это не связано с AV или брандмауэром. Я выключил брандмауэр, и у меня есть только Защитник Windows AV.

Я написал программу для прослушивания портов от 3000 до 5000 включительно на 127.0.0.1.

        int port = 3000;
        while(port <= 5001)
        {
            try
            {
                ListenOnPort(port);
                ++port;

            }
            catch (Exception ex)
            {
                Console.WriteLine($"Listen on {port} failed: {ex.Message}");
                ++port;
            }
        }

Где находится ListenOnPort...

    private static void ListenOnPort(int v)
    {
        var uri = new UriBuilder("http", "127.0.0.1", v);
        HttpListener listener = new HttpListener();
        listener.Prefixes.Add(uri.Uri.ToString());
        Console.WriteLine($"Listening on {v}");
        listener.TimeoutManager.IdleConnection = new TimeSpan(0, 0, 1);
        listener.Start();
        var task = listener.GetContextAsync();
        if(task.Wait(new TimeSpan(0,0,1)))
        {
            HttpListenerResponse response = task.Result.Response;
            // Construct a response.
            string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            // Get a response stream and write the response to it.
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            // You must close the output stream.
            output.Close();
        }
        listener.Stop();
    }

Программа выдала вывод, подобный этому ...

Listening on 3000
Listen on 3000 failed: The process cannot access the file because it is being used by another process
Listening on 3001
Listen on 3001 failed: The process cannot access the file because it is being used by another process
Listening on 3002
Listen on 3002 failed: The process cannot access the file because it is being used by another process
Listening on 3003
Listen on 3003 failed: The process cannot access the file because it is being used by another     process
Listening on 3004
Listen on 3004 failed: The process cannot access the file because it is being used by another process
Listening on 3005
Listen on 3005 failed: The process cannot access the file because it is being used by another process
Listening on 3006
Listening on 3007
Listening on 3008
Listening on 3009
Listening on 3010

Я обнаружил, что между диапазонами 3000 и 5000 существует 624 порта, которыезаблокирован. Между тем "netstat -ano" показывает, что в этом диапазоне используется ровно 5 портов. Так что же блокирует 619 других портов?

...