Как узнать, какой процесс прослушивает порт в Windows?

Как узнать, какой процесс прослушивает порт в Windows?

7.09.2008 06:26:12
Currports - это инструмент, который также помогает искать и фильтровать. Nirsoft.net/utils/cports.html
Blue Clouds 23.09.2018 05:00:21
Я столкнулся с этим, пытаясь запустить Tomcat в режиме отладки под IntelliJ. Лучшим решением для меня оказалось изменение конфигурации транспортного средства отладки (File-> Settings-> Build / exe / deploy-> Debugger) с "socket" на "Общая память".
TMN 28.03.2019 15:28:26
30 ОТВЕТОВ
РЕШЕНИЕ

Новый ответ, powershell

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

Старый ответ, cmd

 C:\> netstat -a -b

(Добавьте -n, чтобы остановить попытки разрешения имен хостов, что сделает его намного быстрее.)

Обратите внимание на рекомендацию датчанина для TCPView . Это выглядит очень полезно!

-a Отображает все соединения и порты прослушивания.

-b Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания. В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании соединения или порта прослушивания. В этом случае имя исполняемого файла находится в [] внизу, вверху - компонент, который он вызвал, и так далее, пока не будет достигнут TCP / IP. Обратите внимание, что этот параметр может занять много времени и завершится ошибкой, если у вас нет достаточных разрешений.

-n Отображает адреса и номера портов в числовой форме.

-o Отображает идентификатор процесса-владельца, связанный с каждым соединением.

2547
31.01.2020 11:00:11
-о, чтобы получить PID
Laurent K 10.07.2012 08:03:22
и taskkill / PID <pid>, чтобы затем завершить процесс, используя / F, если необходимо.
BitMask777 4.03.2013 20:03:28
Возможно, вам придется запустить оболочку командной строки от имени администратора, в противном случае вы можете получить сообщение об ошибке о недостаточных привилегиях. Используйте параметр «Запуск от имени администратора» при щелчке правой кнопкой мыши cmd.exe.
Gruber 29.07.2014 11:20:56
Работает, но требует повышенного разрешения. Shift + щелчок правой кнопкой мыши на значке команды -> запуск от имени администратора
Christian Bongiorno 18.06.2015 20:53:32
Получив PID - скажем так 1234- тогда вы можете использовать, tasklist /fi "pid eq 1234"чтобы узнать название и другие детали процесса.
Steve Chambers 28.11.2017 10:32:52

Для Windows:

netstat -aon | find /i "listening"
218
9.08.2019 20:30:27
+1 Но имейте в виду, что если ваши окна работают на языке, отличном от английского, вам придется изменить «прослушивание» на родной термин. Например, netstat -aon | find /i "abhören"для немецкого.
Levite 30.06.2014 10:29:58
В моем случае это не сработало, возможно, из-за знака кавычек, но решение netstat -aon | findstr LISTENING работает отлично!
The Godfather 17.11.2015 16:07:11
Это работает, не требуя повышенных привилегий.
Vlad Schnakovszki 2.10.2017 16:02:42
Я получаю сообщение об ошибке при попытке выполнить эту команду на W10 15063.729 с помощью PowerShell:FIND: Parameter format not correct
Nicke Manarin 22.12.2017 18:05:31
Как этот ответ относится к "выяснить, какой процесс [имя] прослушивает порт в Windows?"
Pawel Cioch 16.04.2019 19:56:34

Используйте TCPView, если вы хотите графический интерфейс для этого. Это старое приложение Sysinternals, которое Microsoft купила.

229
13.11.2019 09:21:36
На мой взгляд, это лучший вариант, тем более что все процессы находятся в одном списке, и вы можете закрыть процессы, щелкнув по ним правой кнопкой мыши.
Andreas Lundgren 18.01.2016 08:23:50
Кроме того, это не требует прав администратора!
Janac Meena 9.02.2018 18:34:00

Если вы хотите использовать инструмент с графическим интерфейсом, для этого есть TCPView Sysinternals .

15
13.11.2019 09:21:57
  1. Откройте окно командной строки (от имени администратора). В поле «Пуск \ Поиск» введите «cmd», затем щелкните правой кнопкой мыши «cmd.exe» и выберите «Запуск от имени администратора».

  2. Введите следующий текст и нажмите Enter.

    netstat -abno

    -a Отображает все соединения и порты прослушивания.

    -b Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания. В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании соединения или порта прослушивания. В этом случае имя исполняемого файла находится в [] внизу, вверху - компонент, который он вызвал, и так далее, пока не будет достигнут TCP / IP. Обратите внимание, что этот параметр может занять много времени и завершится ошибкой, если у вас нет достаточных разрешений.

    -n Отображает адреса и номера портов в числовой форме.

    -o Отображает идентификатор процесса-владельца, связанный с каждым соединением.

  3. Найдите порт, который вы слушаете, в разделе «Локальный адрес».

  4. Посмотрите на имя процесса прямо под этим.

ПРИМЕЧАНИЕ. Чтобы найти процесс в диспетчере задач

  1. Обратите внимание на PID (идентификатор процесса) рядом с портом, который вы просматриваете.

  2. Откройте диспетчер задач Windows.

  3. Выберите вкладку «Процессы».

  4. Найдите PID, который вы указали, когда выполняли netstat на шаге 1.

    • Если вы не видите столбец PID, нажмите View / Select Columns. Выберите PID.

    • Убедитесь, что выбран параметр «Показывать процессы от всех пользователей».

72
15.05.2017 02:41:50

Используйте следующие инструменты: Из cmd : C:\> netstat -anobс правами администратора .

Process Explorer

Дамп процесса

Порт Монитор

Все из sysinternals.com.

Если вы просто хотите узнать, какой процесс запущен и какие потоки находятся под каждым процессом, я рекомендую вам узнать об этом wmic. Это замечательный инструмент командной строки, который дает вам гораздо больше, чем вы можете себе представить.

Пример:

c:\> wmic process list brief /every:5

Приведенная выше команда будет отображать список всех процессов в течение коротких 5 секунд. Чтобы узнать больше, вы можете просто пойти с /?командой Windows, например,

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?

И так далее. :)

6
13.11.2019 09:26:09

Использование:

netstat -a -o

Это показывает PID процесса, запущенного на определенном порту.

Запомните идентификатор процесса и перейдите на Диспетчер задач и вкладку «Службы» или «Сведения» и завершите процесс с тем же PID.

Таким образом, вы можете убить процесс, запущенный на определенном порту в Windows.

6
13.11.2019 09:27:41

Вы можете получить больше информации, если выполните следующую команду:

netstat -aon | find /i "listening" |find "port"

Использование команды «Найти» позволяет фильтровать результаты. find /i "listening"будут отображаться только порты, которые «слушают». Обратите внимание, что вам нужно /iигнорировать регистр, иначе вы наберете find "LISTENING". | find "port"ограничит результаты только теми, которые содержат определенный номер порта. Обратите внимание, что при этом он также будет фильтровать результаты, которые имеют номер порта в любом месте строки ответа.

79
13.11.2019 09:28:57
FWIW, пытающийся запустить это в PowerShell v2.0, выдает ошибку FIND: Parameter format not correct. Вам нужно добавить пробел после критерия поиска. Это оставит вас с netstat -aon | find /i "listening" | find "1234 ".
self. 25.08.2015 13:16:57
Замените «порт» выше на свой порт, например «5000»
jbooker 17.06.2017 23:58:33
@self. Я все еще получаю эту ошибку с PS 5.1, даже после добавления пробела после канала. Вы знаете, что происходит?
Nicke Manarin 22.12.2017 18:11:12
@NickeManarinin & @self либо сначала перейдите с powershell на cmd (просто введите cmd и нажмите enter, затем повторите команду), либо вместо этого используйте powershell: netstat -aon | find / i " {back tick}" listening {back tick}"" | find " {back tick}" port {back tick}" «(<- обратите внимание на экранированные кавычки - извините за термин, back tickпоскольку я не могу добавить фактического персонажа, так как он считает, что это отрывок)
Tristan van Dam 5.03.2018 06:37:06

netstat -aoи netstat -abсообщит вам приложение, но если вы не являетесь системным администратором, вы получите «Запрошенная операция требует повышения прав».

Это не идеально, но если вы используете Process Explorer от Sysinternals, вы можете перейти к свойствам определенных процессов и посмотреть на вкладку TCP, чтобы увидеть, используют ли они интересующий вас порт. Это что-то вроде иголки и стога сена. вещь, но, возможно, это поможет кому-то ...

10
13.11.2019 09:30:25
Если вы не являетесь администратором, вы не сможете использовать Process Explorer (или даже Windows Task Manager> Resource Manager), чтобы получить эту информацию от любого процесса, который не принадлежит вам с самого начала.
Abel 25.01.2017 11:52:44

Чтобы получить список всех идентификаторов процессов-владельцев, связанных с каждым соединением:

netstat -ao |find /i "listening"

Если вы хотите убить какой-либо процесс, имейте ID и используйте эту команду, чтобы порт стал свободным

Taskkill /F /IM PID of a process
30
13.11.2019 09:30:59
это не учитывает прослушивание портов UDP
evandrix 2.12.2018 20:30:36

Есть родной графический интерфейс для Windows:

  • Меню Пуск → Все программыСтандартныеСистемные инструментыМонитор ресурсов

Или запустить resmon.exe , или из вкладки производительности диспетчера задач .

Введите описание изображения здесь

2160
13.11.2019 09:32:25
Также показывает состояние брандмауэра привязки (последний столбец). Очень полезный
Raphael 2.07.2014 17:34:04
Вы должны быть администратором (или в этой группе), чтобы запустить это.
KrishPrabakar 4.01.2016 07:40:54
@bcorso, что значит привязка к " не указанному адресу "?
Pacerier 22.01.2016 14:36:10
Также может быть запущен из вкладки «Диспетчер задач», по крайней мере, в Windows 10. (Не проверял другие версии.)
Mathieu K. 9.10.2016 13:55:39
Комментарий @ user4836454 выше НЕ верен: монитор ресурсов показывает порты со слушателями, даже если к этим портам нет сетевого подключения. Просто загляните в раздел «Порты прослушивания» вместо раздела «TCP-соединения».
Jpsy 28.12.2017 09:27:22

Сначала мы находим идентификатор процесса той конкретной задачи, которую нам нужно устранить, чтобы освободить порт:

Тип

netstat -n -a -o

После выполнения этой команды в командной строке Windows (cmd) выберите pid, который я считаю последним столбцом. Предположим, это 3312.

Сейчас типа

taskkill /F /PID 3312

Теперь вы можете перепроверить, набрав netstatкоманду.

ПРИМЕЧАНИЕ: иногда Windows не позволяет вам запускать эту команду непосредственно на CMD, поэтому сначала вам нужно выполнить следующие шаги:

Из меню «Пуск» -> командная строка (щелкните правой кнопкой мыши на командной строке и запустите от имени администратора)

47
13.11.2019 09:35:07

Я рекомендую CurrPorts от NirSoft.

CurrPorts может фильтровать отображаемые результаты. TCPView не имеет этой функции.

Примечание. Вы можете щелкнуть правой кнопкой мыши соединение сокета процесса и выбрать «Закрыть выбранные соединения TCP» (вы также можете сделать это в TCPView). Это часто устраняет проблемы с подключением к Outlook и Lync после переключения VPN. С помощью CurrPorts вы также можете закрывать соединения из командной строки с помощью параметра «/ close».

8
2.11.2017 17:37:31

Получить 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
    
  • из каждой строки %aизвлекается PID ( имя здесь не важно) (PID является элементом 5th в этой строке) и передается следующей команде

    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
56
10.02.2016 17:56:55
Хороший ответ, но вы должны изменить его, findstr :9000если нет, вы даже найдете приложения, содержащие номер (например, при поиске «80» вы найдете приложения и на портах 80, 800, 8000).
Radon8472 4.02.2019 14:16:30

Получить номер порта из PID в Windows очень просто.

Ниже приведены шаги:

  1. Перейти к запуску → введите CMD → нажмите Enter.

  2. Напишите следующую команду ...

    netstat -aon | findstr [port number]
    

    (Примечание: не используйте квадратные скобки.)

  3. Нажмите Enter...

  4. Затем cmd сообщит вам подробности службы, работающей на этом порту, вместе с PID.

  5. Откройте диспетчер задач, перейдите на вкладку службы и сопоставьте PID с идентификатором cmd, и все.

27
13.11.2019 09:37:59

Для тех, кто использует 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
6
13.11.2019 09:39:10

В 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
    
16
2.11.2016 19:19:44

Введите в команду: netstat -aon | findstr :DESIRED_PORT_NUMBER

Например, если я хочу найти порт 80: netstat -aon | findstr :80

Этот ответ был первоначально отправлен на этот вопрос .

13
13.11.2019 09:40:21

Для Windows, если вы хотите найти материал, прослушивающий или подключенный к порту 1234, выполните следующую команду в командной строке:

netstat -na | find "1234"
2
24.01.2017 21:10:18

Просто откройте командную оболочку и введите (скажем, ваш порт 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

Это как упомянуто здесь .

18
13.11.2019 09:42:15
К вашему сведению / для всех, кто заинтересован: либо findstr 123456(без кавычек), либо find "123456"(с кавычками). (@Josh)
Kevin Cruijssen 13.06.2018 15:05:18

Используя 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 завершающую строку для каждого совпадения паттерна.
5
13.11.2019 09:43:11

Ключ -b, упомянутый в большинстве ответов, требует наличия прав администратора на компьютере. Вам не нужны повышенные права, чтобы получить имя процесса!

Найдите pid процесса, запущенного по номеру порта (например, 8080)

netstat -ano | findStr "8080"

Найти имя процесса по pid

tasklist /fi "pid eq 2216"

найти процесс по TCP / IP порту

134
19.07.2018 11:24:04

Используйте приведенный ниже пакетный скрипт, который принимает имя процесса в качестве аргумента и выдает netstatрезультат для процесса.

@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End

:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------

netstat -ano |findstr %z%
goto :eof

:End
1
13.11.2019 09:45:04

Netstat:

  • -a отображает все порты подключения и прослушивания
  • -b отображает исполняемые файлы
  • -n stop разрешить имена хостов (числовая форма)
  • -в владении процессом

    netstat -bano | findstr "7002"
    
    netstat -ano > ano.txt 
    

Инструмент Currports помогает искать и фильтровать

11
13.11.2019 09:45:43

Программно вам нужен материал из iphlpapi.h , например GetTcpTable2 (). Структуры, подобные MIB_TCP6ROW2, содержат PID владельца.

5
5.11.2018 18:16:10

Чтобы узнать, какой конкретный процесс (PID) использует какой порт:

netstat -anon | findstr 1234

Где 1234 - PID вашего процесса. [Перейдите в Диспетчер задач → Служба / вкладка Процессы, чтобы узнать PID вашего приложения.]

18
13.11.2019 09:46:24
Следует отметить, что вам не нужно устанавливать -nфлаг дважды. -anoдостаточно.
mwieczorek 29.03.2019 18:56:03

Это единственное решение, которое мне помогает, вот оно. Просто замените 3000 своим портом:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id

Изменить: Изменены killк Stop-Processдля более PowerShell-подобного языка

6
16.12.2019 21:27:40
Вы, вероятно, не хотите убивать процесс автоматически. Я бы отделил эту команду kill и объяснил бы это. Не хочу, чтобы кто-то плохо копировал это, не задумываясь.
TinkerTenorSoftwareGuy 19.02.2019 20:27:52
И если вы собираетесь полностью заменить решение PowerShell на Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
CubanX 13.12.2019 16:02:22
  1. Откройте командную строку - старт → Runcmdили меню Пуск → Все программыПринадлежностиCommand Prompt .

  2. Тип

    netstat -aon | findstr '[port_number]'
    

Замените [port_number]фактическим номером порта, который вы хотите проверить, и нажмите Enter.

  1. Если порт используется каким-либо приложением, то будут показаны подробности этого приложения. Номер, который показан в последнем столбце списка, представляет собой PID (идентификатор процесса) этого приложения. Запишите это.
  2. Тип

    tasklist | findstr '[PID]'
    

Замените на [PID]число из вышеприведенного шага и нажмите Enter.

  1. Вам будет показано имя приложения, которое использует номер вашего порта.
9
13.11.2019 09:48:53
На Win 10: Ваша команда на шаге 2 и шаге 4 не работает, если вы не замените простые кавычки на двойные. Должен сказать netstat -aon | findstr "[номер_порта]"
Leonardo Lopez 6.06.2019 18:34:34

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

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do tasklist /fi "pid eq %i"

Или, если вы хотите убить его:

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do Taskkill /F /IM %i

Вы также можете поместить эти команды в файл летучей мыши (они будут немного отличаться - заменить %iна %%i):

файл portInfo.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do (
    tasklist /fi "pid eq %%i"
)

файл portKill.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do (
    Taskkill /F /IM %%i
)

Тогда вы из cmd можете сделать это:

portInfo.bat 8080

или

portKill.bat 8080

0
13.11.2019 09:51:47
Это может быть полезным сценарием. Тем не менее, я попробовал это в CMD, а также PowerShell 6 без удачи. Возможно, вы могли бы улучшить свой ответ, предоставив немного больше деталей.
Manfred 15.12.2019 21:27:24
Первая часть работает? Это только проблема с "летучей мышью"? Существуют некоторые различия в передаче переменных: (%% i)
lczapski 21.12.2019 11:00:42
@Manfred Я пробовал это на 3 разных Windows 10. Например, .\portInfo.bat 800в PowerShell это дает что-то вроде этого:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
lczapski 23.12.2019 07:55:28
Извините, не повезло. Я поместил эту команду в файл с именем portInfo.batв терминале powershell, а затем выполнил .\portInfo.bat 8080. Вывод был просто содержимым командного файла. Очень хорошо, что я что-то упускаю. Обратите внимание, что я использую PowerShell 6.2.3 в Windows 10. Я также попробовал это в обычной командной строке, но результат был тот же: вывод содержимого скрипта. Я уверен, что мне не хватает важной информации, чтобы сделать эту работу.
Manfred 28.12.2019 07:15:46
@Manfred Содержимое файла должно быть напечатано, как я показал в предыдущем коммите. Возможно, на порту 8080 ничего не было. Вы пробовали первую команду? И он вернул что-то для этого порта? for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do tasklist /fi "pid eq %i"
lczapski 28.12.2019 13:54:30

В моем случае порт (3000) вообще не использовался и не виден в netstat. Но! Деинсталлятор Docker для Windows решил проблему.

0
24.03.2020 16:37:43