При устранении проблем с сетевым подключением или безопасностью важно определить, какой процесс прослушивает определенный порт в 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: использование монитора ресурсов
Пример кода:
- Нажмите
Win + R, чтобы открыть диалоговое окно «Выполнить». - Введите
resmonи нажмите Enter. - В окне «Монитор ресурсов» перейдите на вкладку «Сеть».
- Найдите порт в разделе «Порты прослушивания». Будет отображено соответствующее имя процесса и 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. Анализ журналов событий
Пример кода:
- Откройте средство просмотра событий (нажмите
Win + R, введитеeventvwr.mscи нажмите Enter). - Перейдите в «Журналы Windows» >«Система».
- На панели «Действия» справа нажмите «Фильтровать текущий журнал».
- В настройках фильтра выберите «Источники событий» как «TCP/IP» и «Идентификатор события» как «4227» (порт уже используется).
- В сведениях о событии будет указан идентификатор (PID) процесса-нарушителя.
Определение процесса, прослушивающего определенный порт в Windows, имеет решающее значение для эффективного устранения неполадок сети и анализа безопасности. Используя командную строку, PowerShell, монитор ресурсов, сторонние инструменты, такие как TCPView, написание сценариев Python или анализ журналов событий, вы можете быстро и эффективно определить ответственный процесс.
Не забудьте выбрать метод, который соответствует вашим предпочтениям и техническим знаниям. Имея в своем распоряжении эти методы, вы будете готовы исследовать и решать проблемы, связанные с портами в Windows.