В Windows при запуске сервисов может возникнуть конфликт портов, если нужный порт уже занят другим процессом. Например, IIS не запустится на порту 80, если он используется. В этой статье расскажем, как определить, какая программа прослушивает TCP или UDP порт, с помощью netstat, PowerShell, tasklist и как освободить порт.
Поиск программы по порту с помощью netstat
1. Выведите все прослушиваемые порты:
netstat -aon | find "LIST"
Параметры:
– -a: показывает все подключения и порты.
– -o: отображает PID процесса.
– -n: числовой формат адресов и портов.
2. Найдите процесс по конкретному порту (например, 80):
netstat -aon | findstr ":80" | findstr "LISTENING"
Пример вывода: порт 80 занят процессом с PID 16124.
3. Определите программу по PID:
tasklist /FI "PID eq 16124"
Вывод покажет имя исполняемого файла (например, tiny.exe).
4. Однострочная команда:
for /f "tokens=5" %a in ('netstat -aon ^| findstr :80') do tasklist /FI "PID eq %a"
Поиск программы с помощью PowerShell
1. Найдите процесс для TCP-порта:
Get-Process -Id (Get-NetTCPConnection -LocalPort 80).OwningProcess
2. Найдите процесс для UDP-порта:
Get-Process -Id (Get-NetUDPEndpoint -LocalPort 53).OwningProcess
3. Завершите процесс:
Get-Process -Id (Get-NetTCPConnection -LocalPort 80).OwningProcess | Stop-Process
4. Проверьте, свободен ли порт:
Test-NetConnection localhost -Port 80
Поиск пути к исполняемому файлу
1. Поиск файла по имени:
cd \
dir tiny.exe /s /p
2. Использование where:
where /R C:\ tiny
Пример: найдено c:\Temp\tinyweb\tinyweb-1-94\tiny.exe.
Устранение неполадок
Порт не отображается:
– Убедитесь, что процесс запущен (netstat -aon).
– Проверьте права администратора для PowerShell.
Конфликт портов:
– Завершите процесс (Stop-Process) или измените порт сервиса (например, в настройках IIS).
Файл не найден:
– Проверьте правильность имени файла в tasklist.
– Используйте where для поиска по всему диску.
Рекомендации
– Безопасность: Завершайте только известные процессы, чтобы не нарушить работу системы.
– Мониторинг: Используйте Resource Monitor (resmon) для визуального анализа сетевых подключений.
– Автоматизация: Создайте скрипт для проверки портов:
$port = 80
$process = Get-Process -Id (Get-NetTCPConnection -LocalPort $port -ErrorAction SilentlyContinue).OwningProcess
if ($process) { Write-Output "Port $port used by $($process.ProcessName) (PID: $($process.Id))" } else { Write-Output "Port $port is free" }
– Логи: Проверяйте Event Viewer (eventvwr) для анализа ошибок портов.
Определение программы, использующей порт в Windows, возможно через netstat, tasklist или PowerShell (Get-NetTCPConnection, Get-NetUDPEndpoint). Эти инструменты позволяют быстро найти процесс, завершить его или освободить порт. Использование PowerShell упрощает автоматизацию и предоставляет гибкость для анализа сетевых подключений.