6 методов определения процесса, прослушивающего порт в Windows

При устранении проблем с сетевым подключением или безопасностью важно определить, какой процесс прослушивает определенный порт в Windows. В этой статье мы рассмотрим шесть различных методов выполнения этой задачи. К каждому методу прилагается пример кода, что позволяет вам выбрать тот, который лучше всего соответствует вашим потребностям.

Метод 1: использование командной строки (CMD)
Пример кода:

netstat -ano | findstr :<port_number>

Объяснение:
Эта команда использует утилиту netstatдля отображения активных сетевых подключений и прослушиваемых портов. Команда findstrфильтрует выходные данные, чтобы отображать только строку, содержащую указанный номер порта. В столбце PID (ID процесса) будет указан процесс, ответственный за прослушивание этого порта.

Метод 2: использование PowerShell
Пример кода:

Get-NetTCPConnection -LocalPort <port_number> | Select-Object -ExpandProperty OwningProcess

Объяснение:
PowerShell предоставляет командлет Get-NetTCPConnectionдля получения TCP-соединений. Указав желаемый номер порта, мы можем отфильтровать выходные данные, чтобы включить только соединение через этот порт. Свойство OwningProcessпредоставит идентификатор процесса.

Метод 3: использование монитора ресурсов
Пример кода:

  1. Нажмите Win + R, чтобы открыть диалоговое окно «Выполнить».
  2. Введите resmonи нажмите Enter.
  3. В окне «Монитор ресурсов» перейдите на вкладку «Сеть».
  4. Найдите порт в разделе «Порты прослушивания». Будет отображено соответствующее имя процесса и PID.

Метод 4: использование TCPView (стороннего инструмента)
Пример кода:
Загрузите TCPView с официального сайта Microsoft и запустите его. Инструмент отобразит список всех активных TCP и UDP-соединений, включая имя процесса, PID и порты, которые они прослушивают.

Метод 5. Написание сценария Python
Пример кода:

import psutil
def find_process_by_port(port):
    for proc in psutil.process_iter(['pid', 'name']):
        try:
            connections = proc.connections()
            for conn in connections:
                if conn.laddr.port == port and conn.status == 'LISTEN':
                    return proc.pid, proc.name()
        except psutil.AccessDenied:
            continue
    return None
port_number = <port_number>
result = find_process_by_port(port_number)
if result:
    pid, name = result
    print(f"Process {name} (PID: {pid}) is listening on port {port_number}.")
else:
    print(f"No process found listening on port {port_number}.")

Объяснение:
Используя библиотеку psutil, этот сценарий Python перебирает все запущенные процессы и их соединения. Он соответствует указанному порту и статусу соединения, чтобы идентифицировать процесс, прослушивающий этот порт.

Метод 6. Анализ журналов событий
Пример кода:

  1. Откройте средство просмотра событий (нажмите Win + R, введите eventvwr.mscи нажмите Enter).
  2. Перейдите в «Журналы Windows» >«Система».
  3. На панели «Действия» справа нажмите «Фильтровать текущий журнал».
  4. В настройках фильтра выберите «Источники событий» как «TCP/IP» и «Идентификатор события» как «4227» (порт уже используется).
  5. В сведениях о событии будет указан идентификатор (PID) процесса-нарушителя.

Определение процесса, прослушивающего определенный порт в Windows, имеет решающее значение для эффективного устранения неполадок сети и анализа безопасности. Используя командную строку, PowerShell, монитор ресурсов, сторонние инструменты, такие как TCPView, написание сценариев Python или анализ журналов событий, вы можете быстро и эффективно определить ответственный процесс.

Не забудьте выбрать метод, который соответствует вашим предпочтениям и техническим знаниям. Имея в своем распоряжении эти методы, вы будете готовы исследовать и решать проблемы, связанные с портами в Windows.