Как узнать, какой процесс прослушивает порт в Windows?
Как узнать, какой процесс прослушивает порт в Windows?
35 ответов
PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
CMD
C:\> netstat -a -b
(добавьте -n, чтобы остановить попытки разрешения имен хостов, что сделает его намного быстрее)
Обратите внимание на рекомендацию датчанина для TCPView. Выглядит очень полезно!
-a Отображает все соединения и порты прослушивания.
-b Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания. В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании порта подключения или прослушивания. В этом случае имя исполняемого файла находится в [] внизу, вверху - компонент, который он вызвал, и так далее, пока не будет достигнут TCP/IP. Обратите внимание, что этот параметр может занять много времени и завершится ошибкой, если у вас нет достаточных разрешений.
-n Отображает адреса и номера портов в числовой форме.
-o Отображает идентификатор процесса-владельца, связанный с каждым соединением.
Есть родной графический интерфейс для Windows:
- Пуск >> Все программы >> Стандартные >> Системные инструменты >> Монитор ресурсов
или запустить resmon.exe
или из вкладки производительности TaskManager
Используйте TCPView, если вы хотите графический интерфейс для этого. Это старое приложение Sysinternals, которое Microsoft купила.
Ключ -b, упомянутый в большинстве ответов, требует наличия прав администратора на компьютере. Вам не нужны повышенные права, чтобы получить имя процесса!
Найдите pid процесса, запущенного по номеру порта (например, 8080)
netstat -ano | findStr "8080"
Найти имя процесса по pid
tasklist /fi "pid eq 2216"
Вы можете получить больше информации, если выполните следующую команду:
netstat -aon |find /i "listening" |find "port"
Использование команды "Найти" позволяет фильтровать результаты. find /i "listening" будет отображать только порты "Listening". Обратите внимание, что вам нужно /i, чтобы игнорировать регистр, иначе вы наберете find "LISTENING". |find "port" ограничит результаты только теми, которые содержат определенный номер порта. Обратите внимание, что при этом он также будет фильтровать результаты, которые имеют номер порта в любом месте строки ответа.
Откройте окно командной строки (от имени администратора). В поле "Пуск \ Поиск" введите "cmd", затем щелкните правой кнопкой мыши "cmd.exe" и выберите "Запуск от имени администратора".
Введите следующий текст, затем нажмите Enter.
netstat -abno
-a Отображает все соединения и порты прослушивания.
-b Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания. В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании соединения или порта прослушивания. В этом случае имя исполняемого файла находится в [] внизу, вверху - компонент, который он вызвал, и так далее, пока не будет достигнут TCP/IP. Обратите внимание, что этот параметр может занять много времени и завершится ошибкой, если у вас нет достаточных разрешений.
-n Отображает адреса и номера портов в числовой форме.
-o Отображает идентификатор процесса-владельца, связанный с каждым соединением.
Найдите порт, который вы слушаете, в разделе "Локальный адрес".
Посмотрите на имя процесса прямо под этим.
ПРИМЕЧАНИЕ. Чтобы найти процесс в диспетчере задач
Обратите внимание на PID (идентификатор процесса) рядом с портом, который вы просматриваете.
Откройте диспетчер задач Windows.
Выберите вкладку "Процессы".
Найдите PID, который вы указали, когда выполняли netstat на шаге 1.
Если вы не видите столбец PID, нажмите View / Select Columns. Выберите PID.
Убедитесь, что выбран параметр "Показывать процессы от всех пользователей".
Получить PID и имя изображения
Используйте только одну команду:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
где 9000
должен быть заменен вашим номером порта.
Вывод будет содержать что-то вроде этого:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Объяснение:
он перебирает каждую строку из вывода следующей команды:
netstat -aon | findstr 9000
с каждой строки, PID (
%a
- имя не важно здесь) извлекается (PID является5
элемент в этой строке) и передается следующей командеtasklist /FI "PID eq 5312"
Если вы хотите пропустить заголовок и возврат командной строки, вы можете использовать:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Выход:
java.exe 5312 Services 0 130,768 K
Сначала мы находим идентификатор процесса той конкретной задачи, которую нам нужно устранить, чтобы освободить порт
тип
netstat -n -a -o
После выполнения этой команды в командной строке Windows (CMD) выберите PID, который я думаю, что последний столбец предполагает, что это 3312
Сейчас типа
Taskkill /F /PID 3312
Теперь вы можете перепроверить, набрав команду netstat.
ПРИМЕЧАНИЕ: иногда Windows не позволяет вам запускать эту команду непосредственно на CMD, поэтому сначала вам нужно выполнить эти шаги из start-> командной строки (щелкните правой кнопкой мыши на командной строке и запустите от имени администратора)
С PowerShell 5 в Windows 10 или Windows Server 2016 запустите Get-NetTCPConnection
Командлет. Я думаю, что это также должно работать на старых версиях Windows.
По умолчанию вывод Get-NetTCPConnection
по какой-то причине не включает идентификатор процесса, и это немного сбивает с толку. Однако вы всегда можете получить его, отформатировав вывод. Недвижимость, которую вы ищете OwningProcess
,
Если вы хотите узнать идентификатор процесса, который прослушивает порт 443, выполните эту команду:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List LocalAddress : :: LocalPort : 443 RemoteAddress : :: RemotePort : 0 State : Listen AppliedSetting : OwningProcess : 4572 CreationTime : 02.11.2016 21:55:43 OffloadState : InHost
Отформатируйте вывод в таблицу со свойствами, которые вы ищете:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess LocalAddress LocalPort State OwningProcess ------------ --------- ----- ------------- :: 443 Listen 4572 0.0.0.0 443 Listen 4572
Если вы хотите узнать имя процесса, выполните эту команду:
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 143 15 3448 11024 4572 0 VisualSVNServer
Чтобы получить список всех идентификаторов процессов-владельцев, связанных с каждым соединением:
netstat -ao |find /i "listening"
Если вы хотите убить какой-либо процесс, используйте идентификатор и используйте эту команду, чтобы порт стал свободным
Taskkill /F /IM pidof a process
Получить номер порта из pid в Windows очень просто.
Ниже приведены шаги:
1) Перейти к запуску -> введите CMD -> нажмите Enter.
2) написать следующую команду...
netstat -aon | findstr [port number]
(Примечание: не используйте квадратные скобки.)
3) нажмите ввод...
4) Затем cmd сообщит вам подробности службы, работающей на этом порту, вместе с pid.
5) Откройте диспетчер задач и перейдите на вкладку службы и сопоставьте pid с этим из cmd и все.
Если кому-то нужен эквивалент для macOS, вот он:
lsof -i tcp:8080
После того, как вы получите PID
процесса, вы можете убить его:
kill -9 <PID>
Чтобы узнать, какой конкретный процесс (PID) использует какой порт:
netstat -anon | findstr 1234
Где 1234 - PID вашего процесса. [Перейдите в диспетчер задач -> вкладка "Службы / процессы", чтобы узнать PID вашего приложения]
PowerShell
если вы хотите иметь хороший обзор, вы можете использовать это:
Get-NetTCPConnection -State Listen | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort
чем вы получите такую таблицу:
ProcessName LocalAddress LocalPort
----------- ------------ ---------
services :: 49755
jhi_service ::1 49673
svchost :: 135
services 0.0.0.0 49755
spoolsv 0.0.0.0 49672
для udp это:
Get-NetUDPEndpoint | Select-Object -Property *, `
@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| select ProcessName,LocalAddress,LocalPort
Просто откройте командную оболочку и введите: (скажем, ваш порт 123456)
netstat -a -n -o | find "123456"
Вы увидите все, что вам нужно
Заголовки:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
это как упомянуто здесь
Если вы хотите использовать инструмент GUI, для этого есть SysInternals TCPView.
Откройте командную строку - Пуск → Выполнить →
cmd
, или меню Пуск → Все программы → Стандартные → Командная строка.Тип
netstat -aon | findstr '[port_number]'
Заменить [port_number]
с фактическим номером порта, который вы хотите проверить, и нажмите Enter.
- Если порт используется каким-либо приложением, будут показаны подробные сведения об этом приложении. Число, которое отображается в последнем столбце списка, является PID (идентификатором процесса) этого приложения. Обратите на это внимание.
Тип
tasklist | findstr '[PID]'
Заменить [PID]
с номером из предыдущего шага и нажмите Enter.
- Вам будет показано имя приложения, использующего номер вашего порта.
Netstat -a отображает все порты подключения и прослушивания -b отображает исполняемые файлы -n останавливать разрешение имен хостов (числовая форма) -o процесс владения
netstat -bano | findstr "7002"
netstat -ano > ano.txt
Currports помогает искать и фильтровать
Введите в команду: netstat -aon | findstr :DESIRED_PORT_NUMBER
Например, если я хочу найти порт 80: netstat -aon | findstr :80
Этот ответ был первоначально размещен в этой теме.
netstat -ao
а также netstat -ab
сообщить вам приложение, но если вы не являетесь администратором, вы получите "Запрошенная операция требует повышения прав".
Это не идеально, но если вы используете sysinternals Process Explorer, вы можете перейти к свойствам определенных процессов и посмотреть на вкладку TCP, чтобы увидеть, используют ли они интересующий вас порт. это кому-то поможет....
Для тех, кто использует Powershell, попробуйте Get-NetworkStatistics
:
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
Я рекомендую CurrPorts от NirSoft.
CurrPorts может фильтровать отображаемые результаты. TCPView не имеет этой функции.
Примечание. Вы можете щелкнуть правой кнопкой мыши соединение сокета процесса и выбрать "Закрыть выбранные TCP-соединения" (вы также можете сделать это в TCPView). Это часто устраняет проблемы с подключением к Outlook и Lync после переключения VPN. С помощью CurrPorts вы также можете закрывать соединения из командной строки с помощью параметра "/close".
Это единственное решение, которое мне помогает, просто замените 3000 своим портом
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
Найти pid, использующий порт 8000
netstat -aon | findstr '8000'
Чтобы убить этот процесс в Windows
taskkill /pid pid /f
где pid - это идентификатор процесса, который вы получаете от первой команды
Следуйте этим инструментам: - Из cmd: - C:\> netstat -anob
с правами администратора.
http://technet.microsoft.com/en-us/sysinternals/bb896653 - Process Explorer
http://technet.microsoft.com/en-us/sysinternals/bb896645 - Дамп процесса
http://technet.microsoft.com/en-us/sysinternals/bb896644 - Монитор портов
Все от sysinternals.com
Если вы просто хотите узнать, какой процесс запущен и какие потоки находятся под каждым процессом, я рекомендую узнать о wmic
, Замечательный инструмент cmd line, который дает вам гораздо больше, чем вы можете себе представить.
Экзамен: -
c:\> wmic process list brief /every:5
Приведенная выше команда будет показывать весь список процессов каждые 5 секунд. Чтобы узнать больше, вы можете просто пойти с /?
команда окон, например,
c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?
и так далее и тому подобное.:)
netstat -a -o Показывает PID процесса, запущенного на конкретном порту.
Запомните идентификатор процесса и перейдите на вкладку "Диспетчер задач" и "Службы" или "Сведения" и завершите процесс с тем же PID.
Таким образом, вы можете убить процесс, запущенный на конкретном порту в Windows.
Вы также можете проверить зарезервированные порты с помощью команды ниже. Например, Hyper-V зарезервировал несколько портов.
netsh int ipv4 show excludedportrange protocol=tcp
Используя Powershell...
... это будет ваш друг (замените 8080 на номер вашего порта):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Образец вывода
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
Таким образом, в этом примере tnslsnr.exe (база данных OracleXE) прослушивает порт 8080.
Быстрое объяснениеSelect-String
используется для фильтрации длинного вывода netstat
для соответствующих строк.-Pattern
проверяет каждую строку на соответствие регулярному выражению-Context 0,1
будет выводить 0 ведущих строк и 1 завершающую строку для каждого совпадения паттерна.