Як можна дізнатися, який процес прослуховування в порту в Windows?


2272

Як можна дізнатися, який процес прослуховування в порту в Windows?


3
Currports - це інструмент, який допомагає шукати + фільтрувати занадто nirsoft.net/utils/cports.html
Blue Clouds

1
Я зіткнувся з цим під час спроби запустити Tomcat в режимі налагодження під IntelliJ, найкращим рішенням для мене виявилося зміна транспортної конфігурації налагодження (Файл-> Налаштування-> Створення / exe / розгортання> Налагоджувач) з "socket" на "спільна пам'ять".
TMN

Відповіді:


2619

Нова відповідь, повноваження

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

Стара відповідь, cmd

 C:\> netstat -a -b

(Додайте -n, щоб зупинити його, намагаючись вирішити імена хостів, що зробить це набагато швидше.)

Зверніть увагу на рекомендацію Дейн для TCPView . Це виглядає дуже корисно!

-a Відображає всі з'єднання та порти прослуховування.

-b Відображає виконуваний файл, який бере участь у створенні кожного порту підключення чи прослуховування. У деяких випадках відомі виконувані файли розміщують кілька незалежних компонентів, і в цих випадках відображається послідовність компонентів, що беруть участь у створенні порту зв'язку або прослуховування. У цьому випадку ім'я виконуваного файлу знаходиться внизу [], вгорі - компонент, який він викликав, і так далі, поки не буде досягнуто TCP / IP. Зауважте, що ця опція може забирати багато часу та не працюватиме, якщо у вас не буде достатньо дозволів.

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

-o Відображає ідентифікатор процесу володіння, пов'язаний з кожним з'єднанням.


252
-o отримати PID
Лоран K

121
і taskkill / PID <pid> потім припинити процес, використовуючи / F, якщо потрібно.
BitMask777

81
Можливо, вам доведеться запустити оболонку командного рядка як адміністратор, інакше ви можете отримати повідомлення про помилку про недостатню кількість привілеїв. Використовуйте опцію "Запустити як адміністратор", клацнувши правою кнопкою миші cmd.exe.
Грубер

6
Працює, але вимагає підвищеного дозволу. Shift + клацніть правою кнопкою миші на піктограмі команди -> запустити як адміністратор
Крістіан Бонгіорно

18
Отримавши PID - скажімо, це так 1234- тоді ви можете tasklist /fi "pid eq 1234"дізнатися ім'я та інші деталі процесу.
Стів Чемберс

2202

Існує вбудований графічний інтерфейс для Windows:

  • Меню Пуск → Усі програмиАксесуариСистемні інструментиМонітор ресурсів

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

Enter image description here


41
Також відображається стан брандмауера зв’язку (останній стовпець). Дуже корисна.
Рафаель

8
Для цього потрібно бути адміністратором (або в цій групі).
KrishPrabakar

2
@bcorso, Що означає прив'язка до " не вказаної адреси "?
Pacerier

5
Також можна запустити на вкладці «Продуктивність диспетчера завдань», принаймні в Windows 10. (Не перевіряли інші версії.)
Матьє К.

10
Коментар @ user4836454 вище НЕ правильний: Монітор ресурсів НЕ показує порти зі слухачами, навіть якщо до цих портів немає підключення до мережі. Просто загляньте в розділ "Порти прослуховування" замість розділу "З'єднання TCP".
Jpsy

235

Використовуйте TCPView, якщо ви хочете для цього GUI. Microsoft викупила стару програму Sysinternals .


9
На мій погляд, це найкращий варіант, тим більше, що всі процеси знаходяться в одному списку, і ви можете закрити процеси безпосередньо, клацнувши по них правою кнопкою миші.
Андреас Лундгрен

8
Крім того, для цього не потрібні адміністратори!
Janac Meena

222

Для Windows:

netstat -aon | find /i "listening"

25
+1 Але майте на увазі, якщо ваші вікна працюють іншою мовою, ніж англійська, вам доведеться змінити "прослуховування" рідного терміна. Наприклад, netstat -aon | find /i "abhören"для німецької мови.
Левіт

2
У моєму випадку це не спрацювало, можливо, через знак лапок, але рішення netstat -aon | findstr LISTENING працює чудово!
Хрещений батько

Це працює, не вимагаючи підвищених привілеїв, настільки затребуваних.
Влад Шнаковський

1
Я отримую помилку під час спроби запустити цю команду на W10 15063.729 з PowerShell:FIND: Parameter format not correct
Nicke Manarin

1
Наскільки ця відповідь має відношення до "з'ясування, який процес [ім'я] прослуховується в порту в Windows?"
Pawel Cioch

137

Перемикач -b, згаданий у більшості відповідей, вимагає від вас адміністративних прав на машині. Вам не потрібні підвищені права, щоб отримати ім'я процесу!

Знайдіть pid процесу, що працює в номері порту (наприклад, 8080)

netstat -ano | findStr "8080"

Знайдіть ім’я процесу за допомогою pid

tasklist /fi "pid eq 2216"

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


82

Ви можете отримати більше інформації, якщо виконаєте таку команду:

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

за допомогою команди «Знайти» дозволяє фільтрувати результати. find /i "listening"відображатиметься лише порти, які є "Прослуховування". Зверніть увагу, вам потрібно /iігнорувати регістр, інакше ви введете "LISTENING". | find "port"обмежує результати лише тими, що містять конкретний номер порту. Зауважте, на цьому воно також буде фільтрувати результати, які мають номер порту в будь-якій точці відповіді.


8
FWIW намагається запустити це в PowerShell v2.0 приводить до помилки FIND: Parameter format not correct. Вам потрібно додати пробіл після критеріїв пошуку. Це залишить вас netstat -aon | find /i "listening" | find "1234 ".
Я.

2
Замініть «порт» вище своїм портом, колишній «5000»
jbooker

1
@ себе. Я все ще отримую цю помилку з PS 5.1, навіть після додавання місця після труби. Ви знаєте, що відбувається?
Nicke Manarin

2
@NickeManarinin & @self або спершу перейдіть з повороту на cmd (просто введіть cmd і натисніть клавішу Enter, а потім повторіть команду), або в powershell скористайтеся цією командою замість цього: netstat -aon | find / i " {back tick}" прослуховування {back tick}"" | | знайти " {back tick}" порт {back tick}" "(<- зауважте, що втекли котирування - вибачте за термін, back tickоскільки я не можу додати фактичного персонажа, як вважаю, що його прорив)
Трістан ван Дам

72
  1. Відкрийте вікно командного рядка (як адміністратор) У меню "Пуск \ поле пошуку" введіть "cmd", а потім клацніть правою кнопкою миші на "cmd.exe" та виберіть "Запустити як адміністратор"

  2. Введіть наступний текст і натисніть Enter.

    netstat -abno

    -a Відображає всі з'єднання та порти прослуховування.

    Відображає виконуваний файл, який бере участь у створенні кожного порту підключення чи прослуховування. У деяких випадках відомі виконувані файли розміщують кілька незалежних компонентів, і в цих випадках відображається послідовність компонентів, що беруть участь у створенні порту зв'язку або прослуховування. У цьому випадку ім'я виконуваного файлу знаходиться внизу [], вгорі - компонент, який він викликав, і так далі, поки не буде досягнуто TCP / IP. Зауважте, що ця опція може забирати багато часу та не працюватиме, якщо у вас не буде достатньо дозволів.

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

    -o Відображає ідентифікатор процесу володіння, пов'язаний з кожним з'єднанням.

  3. Знайдіть порт, який ви слухаєте, у розділі "Місцева адреса"

  4. Подивіться на ім'я процесу прямо під цим.

ПРИМІТКА. Щоб знайти процес у диспетчері завдань

  1. Зверніть увагу на PID (ідентифікатор процесу) поруч із портом, який ви шукаєте.

  2. Відкрийте диспетчер завдань Windows.

  3. Виберіть вкладку Процеси.

  4. Шукайте PID, який ви зазначили, коли ви робили netstat на кроці 1.

    • Якщо ви не бачите стовпця PID, натисніть на Перегляд / Вибір стовпців. Виберіть PID.

    • Переконайтесь, що вибрано “Показати процеси від усіх користувачів”.


56

Отримайте 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

2
Хороша відповідь, але ви повинні змінити його, findstr :9000якщо ні, ви навіть знайдете програми, що містять число (наприклад, при пошуку "80" ви знайдете додатки і на порту 80, 800, 8000).
Radon8472

48

Спочатку ми знаходимо ідентифікатор процесу цієї конкретної задачі, яку нам потрібно усунути, щоб звільнити порт:

Тип

netstat -n -a -o

Виконавши цю команду в командному рядку Windows (cmd), виберіть pid, який я вважаю останнім стовпцем. Припустимо, це 3312.

Тепер введіть

taskkill /F /PID 3312

Тепер ви можете перехрестити перевірку, ввівши netstatкоманду.

ПРИМІТКА: іноді Windows не дозволяє запускати цю команду безпосередньо на CMD, тому спочатку потрібно виконати наступні дії:

У меню "Пуск" -> командний рядок (клацніть правою кнопкою миші на командному рядку та запустіть як адміністратор)


30

Щоб отримати список усіх ідентифікаторів процесу володіння, пов'язаних із кожним з'єднанням:

netstat -ao |find /i "listening"

Якщо ви хочете вбити будь-який процес, отримайте ідентифікатор і скористайтеся цією командою, щоб порт став вільним

Taskkill /F /IM PID of a process

1
це не враховує прослуховування портів UDP
evandrix

27

Отримати номер порту з PID в Windows дуже просто.

Нижче наведено кроки:

  1. Перейдіть до запуску → введіть cmd → натисніть Enter.

  2. Напишіть таку команду ...

    netstat -aon | findstr [port number]
    

    (Примітка. Не включайте квадратні дужки.)

  3. Натисніть Enter...

  4. Тоді cmd надасть детальну інформацію про службу, що працює на цьому порту, разом із PID.

  5. Відкрийте диспетчер завдань, перейдіть на вкладку служби та співставте PID з cmd, і все.


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

Це так, як тут говорилося .


1
FYI / для всіх, хто цікавиться: це або findstr 123456(без лапок), або find "123456"(з цитатами). (@Josh)
Кевін Круїйсен

18

Щоб дізнатися, який конкретний процес (PID) використовує, який порт:

netstat -anon | findstr 1234

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


1
Слід зазначити, що вам не потрібно -nвстановити прапор двічі. -anoдостатньо.
mwieczorek

16

За допомогою PowerShell 5 в Windows 10 або Windows Server 2016 запускайте Get-NetTCPConnectionкомандлет. Я здогадуюсь, що він також повинен працювати на старих версіях Windows.

Вихід за замовчуванням з Get-NetTCPConnectionякоїсь причини не включає ідентифікатор Process, і це трохи заплутано. Однак ви завжди можете отримати це, відформатувавши вихід. Ви шукаєте власність 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
    


13

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

Наприклад, якщо я хочу знайти порт 80: netstat -aon | findstr :80

Ця відповідь спочатку була розміщена на це питання .


11

Netstat:

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

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

Інструмент Currports допомагає шукати та фільтрувати


11
  1. Відкрийте командний рядок - пуск → Запускcmdабо меню Пуск → Усі програмиАксесуариКомандний рядок .

  2. Тип

    netstat -aon | findstr '[port_number]'
    

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

  1. Якщо порт використовується будь-якою програмою, тоді буде показано його детальну інформацію. Номер, який відображається в останньому стовпчику списку, є PID (ідентифікатор процесу) цієї програми. Зверніть увагу на це.
  2. Тип

    tasklist | findstr '[PID]'
    

Замініть [PID]цифру на вказаному вище кроці та натисніть Enter.

  1. Вам буде показано ім'я програми, яка використовує номер вашого порту.

3
У програмі Win 10: Ваша команда на кроці 2 та 4 не працює, якщо ви не заміните прості лапки подвійними лапками. Слід сказати netstat -aon | findstr "[port_number]"
Леонардо Лопес

Це рішення не потребує підвищеного дозволу. Ткс!
Тоталіс

10

netstat -aoі netstat -abскажу вам програму, але якщо ви не системний адміністратор, ви отримаєте "Запрошена операція вимагає підвищення".

Це не ідеально, але якщо ви використовуєте « Провідник процесів Sysinternals», ви можете перейти до властивостей конкретних процесів і подивитися на вкладку TCP, щоб побачити, чи використовують вони порт, який вас цікавить. Це трохи голки та стога сіна. річ, але, можливо, це комусь допоможе ...


Якщо ви не адміністратор, ви не зможете використовувати Провідник процесів (або навіть диспетчер завдань Windows> Менеджер ресурсів), щоб отримати цю інформацію з будь-якого процесу, який не ваш.
Абель

9

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

CurrPorts може фільтрувати відображені результати. TCPView не має цієї функції.

Примітка. Ви можете клацнути правою кнопкою миші підключення до розетки процесу та вибрати "Закрити вибрані з'єднання TCP" (Ви також можете це зробити в TCPView). Це часто виправляє проблеми з підключенням у мене з Outlook та Lync після переключення VPN. За допомогою CurrPorts ви також можете закрити з'єднання з командного рядка за допомогою параметра "/ close".


7

Однолінійне рішення, яке мені допомагає, це саме таке. Просто замініть 3000 своїм портом:

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

Редагування: Змінено killна Stop-Processбільшу мову, схожу на PowerShell


6
Напевно, ви не хочете вбивати процес автоматично. Я відокремив би цю команду kill і пояснив її. Не хочете, щоб якісь бідні користувачі копіювали, не замислюючись.
TinkerTenorSoftwareGuy

1
І якщо ви збираєтеся вбити повне рішення PowerShell вбивати на Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
CubanX

6

Дотримуйтесь цих інструментів: Від cmd : C:\> netstat -anobз правами адміністратора .

Провідник процесів

Дамп процесу

Портовий монітор

Все з sysinternals.com.

Якщо ви просто хочете знати процес роботи та потоки під кожен процес, рекомендую дізнатися про них wmic . Це чудовий інструмент командного рядка, який дає вам набагато більше, ніж ви можете знати.

Приклад:

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

Наведена вище команда відображатиме короткий список усіх процесів кожні 5 секунд. Щоб дізнатися більше, ви можете просто перейти з /?командою Windows, наприклад,

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

І так далі, і так далі. :)


PortMon (посилання за Port Monitor) призначений для моніторингу послідовних і паралельних портів, а не мережевих портів.
Джеймс

6

Використання:

netstat -a -o

Це показує PID процесу, що працює на певному порту.

Майте на увазі ідентифікатор процесу та перейдіть до диспетчера завдань та служб або деталей і закінчіть процес із таким самим PID.

Таким чином, ви можете вбити процес, який працює на певному порту в Windows.


6

Для тих, хто використовує 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


5

Використовуючи 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 кінцеву лінію для кожного поєднання шаблонів.

2

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

netstat -na | find "1234"

1

Використовуйте нижченаведений пакетний скрипт, який приймає ім'я процесу в якості аргументу і дає 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

На основі відповідей з інформацією та вбивства , для мене корисно поєднувати їх в одній команді . І ви можете запустити це з cmd, щоб отримати інформацію про процес, який слухають на даному порту (приклад 8080):

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

Або якщо ви хочете його вбити:

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

Ви також можете помістити ці команди в файл bat (вони будуть дещо іншими - замініть %iна%%i ):

Файл portInfo.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /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


1
Це може бути корисним сценарієм. Однак я спробував це в CMD, а також PowerShell 6, не пощастивши. Можливо, ви могли б покращити свою відповідь, надавши трохи більше деталей.
Манфред

Чи працює перша частина? Це лише проблема з «кажаном»? Існують деякі відмінності у передачі змінних: (%% i)
lczapski

@Manfred Я спробував це на трьох різних 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

Вибачте, не пощастило. Я помістив цю команду у файл, названий portInfo.batу терміналі powerhell, потім виконаний .\portInfo.bat 8080. Вихід був лише вмістом пакетного файлу. Дуже добре, я щось переглядаю. Зауважте, я використовую PowerShell 6.2.3 в Windows 10. Я також спробував це у звичайній командній лінії, але результат був такий же: Виведення вмісту скрипту. Я впевнений, що мені не вистачає важливої ​​інформації, щоб зробити цю роботу.
Манфред

1
Чому б не додати /nh: @tasklist /nh /fi "pid eq %i"? І саме двері:Findstr ":8080"
Це було не я

0

У моєму випадку порт (3000) взагалі не використовувався і не був видимий у netstat. Але! Видалення Docker для Windows для вирішення проблеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.