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

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

Currports - это инструмент, который помогает искать и фильтровать nirsoft.net/utils/cports.html

Blue Clouds 23.09.2018 08:00

Я столкнулся с этим, пытаясь запустить Tomcat в режиме отладки под IntelliJ, лучшим решением для меня оказалось изменение конфигурации отладочного транспорта (File-> Settings-> Build / exe / deploy-> Debugger) с «сокета» на "Общая память".

TMN 28.03.2019 18:28

netstat -aof | findstr :8080 (поменять 8080 на любой порт)

David Jesus 11.06.2020 20:18

@DavidJesus не показывает процесс в Windows 10.

Smit Johnth 17.02.2021 01:14

@SmitJohnth Я использую netstat -aof | findstr :3306, чтобы найти процесс MySQL в Windows 10, и он отлично работает.

David Jesus 13.03.2021 10:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2 603
5
3 872 442
33
Перейти к ответу Данный вопрос помечен как решенный

Ответы 33

Ответ принят как подходящий

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

TCP

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

UDP

Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess

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

 C:\> netstat -a -b

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

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

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

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

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

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

и taskkill / PID <pid>, чтобы затем завершить процесс, используя / F, если необходимо.

BitMask777 05.03.2013 00:03

Возможно, вам придется запустить оболочку командной строки от имени администратора, иначе вы можете получить сообщение об ошибке о недостаточных правах. При щелчке правой кнопкой мыши cmd.exe используйте параметр «Запуск от имени администратора».

Gruber 29.07.2014 15:20

Работает, но требует повышенного разрешения. Shift + щелкните правой кнопкой мыши значок команды -> запустить от имени администратора

Christian Bongiorno 18.06.2015 23:53

При использовании -o для отображения PID вы можете затем направить его в grep для номера порта (если установлен cygwin или msys), поскольку pid отображается в той же строке, а не имя процесса, которое отображается в отдельной строке.

qwertzguy 21.11.2015 22:37

Иногда я не могу запустить свой httpd-сервер Apache, потому что PID 4 по какой-то причине использует порт 80. Проблема в том, что процесс с PID 4 - это хорошо "Система". Перезагрузка помогает, но если кто-нибудь знает причину или способ узнать, почему Система использует порт 80, я все уши.

sebastian_t 15.06.2016 15:11

@BradWilson "-b" - недопустимая опция, используйте netstat -a -d

Sathish 08.03.2017 15:07

@BradWilson и @Sathish Похоже, что параметры netstat не такие стандартные. Пришлось использовать netstat -a -n -p. Опции -b и -d недоступны. Параметр -o предназначен для таймеров. Параметры -p отображают имя программы и PID. (в Debian 8).

Seth 19.05.2017 20:25

netstat 1.42 (2001-04-15) не имеет флага -b

paradox 26.05.2017 01:16

Получив PID - скажем, 1234 - вы можете использовать tasklist /fi "pid eq 1234", чтобы узнать имя и другие детали процесса.

Steve Chambers 28.11.2017 13:32

В моей системе вывод этой команды, помимо того, что его было ужасно трудно читать из-за переноса, переполнял буфер командной строки. Обычно я предпочитаю инструменты командной строки (хотя, надо признать, мне гораздо удобнее работать с командной строкой Linux, чем с Windows), но в этом случае я нашел графический интерфейс Resource Monitor, предложенный @bcorso, гораздо более полезным.

CarLuva 06.05.2018 05:51

@sebastian_t Для системного процесса (PID 4) есть netsh http show urlacl. Он показывает резервирование системных URL-адресов.

Tereza Tomcova 02.08.2018 18:04

Использование | grep :80 полезно для поиска определенного порта. если установлен grep.

Nabi K.A.Z. 03.08.2018 21:08

netstat -a -b переполнила весь экран cmd. Я не мог найти pid, который искал, пока он не исчез. Мне нужен был способ найти порт определенного процесса с помощью pid.

Talha Imam 14.12.2018 10:01

Код PowerShell на самом деле не работает, я получаю эту ошибку: Get-NetTCPConnection: не удается обработать преобразование аргумента для параметра LocalPort. Невозможно преобразовать значение «portNumber» в тип «System.UInt16 []». Ошибка: «Невозможно преобразовать значение« portNumber »в тип« System.UInt16 ». Ошибка:« Входная строка была в неправильном формате ».

Rodion Sychev 05.06.2019 14:42

Это не работает в PS3.0 - почему люди, работающие с Windows, больше не перечисляют версии? Для какой версии PowerShell предназначены эти команды?

Znamor 12.06.2019 20:40

@RodionSychev Команда powershell ожидает, что вы замените "portNumber" на номер порта, который вы ищете. В сообщении об ошибке указано, что «portNumber» не является числом.

MattOG 24.09.2019 11:50

Ух ты, только Microsoft могла придумать синтаксис, который невозможно запомнить, и никто не запомнит его.

MikeKulls 01.04.2020 15:18

Get-NetTCPConnection: не удается обработать преобразование аргумента для параметра «LocalPort». Невозможно преобразовать значение «portNumber» в тип «System.UInt16 []». Ошибка: «Невозможно преобразовать значение« portNumber »в тип« System.UInt16 ». Ошибка:« Входная строка была в неправильном формате ».

gmlvsv 20.06.2020 21:12

Я получаю сообщение об ошибке. Есть идеи? «Get-NetTCPConnection: не найдено ни одного объекта MSFT_NetTCPConnection со свойством« LocalPort », равным« 49923 ». Проверьте значение свойства и повторите попытку».

Dan Csharpster 16.09.2020 00:35

Для Windows:

netstat -aon | find /i "listening"

+1 Но имейте в виду, если ваши окна работают на другом языке, кроме английского, вам придется изменить "прослушивание" на родной термин. Например. netstat -aon | find /i "abhören" для немецкого языка.

Levite 30.06.2014 14:29

В моем случае это не сработало, возможно, из-за знака кавычек, но решение netstat -aon | findstr ПРОСЛУШИВАНИЕ работает отлично!

The Godfather 17.11.2015 19:07

Это работает, не требуя повышенных привилегий.

Vlad Schnakovszki 02.10.2017 19:02

Я получаю сообщение об ошибке при попытке запустить эту команду на W10 15063.729 с помощью PowerShell: FIND: Parameter format not correct

Nicke Manarin 22.12.2017 21:05

Как этот ответ имеет отношение к «выяснению, какой процесс [имя] прослушивает порт в Windows?»

Pawel Cioch 16.04.2019 22:56

Используйте // i вместо / i при использовании git bash в Windows

joe 02.09.2019 10:41

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

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

Andreas Lundgren 18.01.2016 11:23

Кроме того, это не требует прав администратора!

Janac Meena 09.02.2018 21:34

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

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

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

    netstat -abno

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

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

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

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

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

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

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

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

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

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

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

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

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

Следуйте этим инструментам: От 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 (ссылка позади монитора портов) предназначен для мониторинга портов серийный и параллельно, а не сетевых портов.

James 03.06.2020 02:35

Использовать:

netstat -a -o

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

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

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

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

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

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

Попытка FWIW запустить это в PowerShell v2.0 приводит к ошибке FIND: Parameter format not correct. Вам нужно добавить пробел после критериев поиска. У вас останется netstat -aon | find /i "listening" | find "1234 ".

self. 25.08.2015 16:16

Замените «порт» выше на свой порт, например «5000».

jbooker 18.06.2017 02:58

@себя. Я все еще получаю эту ошибку с PS 5.1, даже после добавления пробела после трубы. Вы знаете, что происходит?

Nicke Manarin 22.12.2017 21:11

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

Tristan van Dam 05.03.2018 09:37

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

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

Если вы не являетесь администратором, вы не сможете использовать Process Explorer (или даже Диспетчер задач Windows> Диспетчер ресурсов), чтобы получить эту информацию из любого процесса, который изначально не принадлежит вам.

Abel 25.01.2017 14:52

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

netstat -ao |find /i "listening"

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

Taskkill /F /IM PID of a process

это не учитывает прослушивание портов UDP

evandrix 02.12.2018 23:30

Для Windows есть собственный графический интерфейс:

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

  • или запустите resmon.exe,

  • или из вкладки Диспетчер задачСпектакль.

Enter image description here

Также показывает статус брандмауэра привязки (последний столбец). Очень практично.

Raphael 02.07.2014 21:34

Вы должны быть администратором (или входить в эту группу), чтобы запустить это.

KrishPrabakar 04.01.2016 10:40

@bcorso, что значит привязка к "неуказанный адрес"?

Pacerier 22.01.2016 17:36

Также может быть запущен из вкладки «Производительность» диспетчера задач, по крайней мере, в Windows 10. (Не проверял другие версии.)

Mathieu K. 09.10.2016 16:55

Вы также можете запустить монитор ресурсов на вкладке производительности диспетчера задач, нажав кнопку Open Resource Monitor. Команда perfmon /res из командной строки также позволяет открыть монитор ресурсов.

RBT 24.04.2017 10:31

Комментарий @ user4836454 выше НЕ правильный: Монитор ресурсов ДЕЙСТВИТЕЛЬНО показывает порты со слушателями, даже если нет сетевого подключения к этим портам. Просто загляните в раздел «Порты прослушивания» вместо раздела «TCP-соединения».

Jpsy 28.12.2017 12:27

Похоже, что при этом упускаются некоторые из портов TCP, которые иногда используются, даже если они используются до такой степени, что другие приложения, которым они нужны, не могут запуститься.

Panzercrisis 26.02.2018 16:54

По какой-то причине искомый pid не был указан в мониторе ресурсов. В конце концов, пришлось запустить команду netstat.

Talha Imam 14.12.2018 10:03

@Pacerier Одному интерфейсу Ethernet может быть назначено несколько IP-адресов (обычно на серверах). «Не указано» означает, что он прослушивает порт по любому адресу, который использует сервер. Напротив, будет отображаться IP-адрес (а), на который будет отвечать программа.

Cliff 06.06.2019 22:07

идеально. ты сэкономил мне время.

vishwa 10.06.2020 09:32

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

Тип

netstat -n -a -o

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

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

taskkill /F /PID 3312

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

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

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

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

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

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

Получить 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 - это элемент 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

Хороший ответ, но вы должны изменить его на findstr :9000, если нет, вы даже найдете приложения, которые содержат номер (например, при поиске «80» вы найдете приложения также на портах 80, 800, 8000).

Radon8472 04.02.2019 17:16

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

Следующие шаги:

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

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

    netstat -aon | findstr [port number]
    

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

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

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

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

Для тех, кто использует 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

В 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 -aon | findstr :DESIRED_PORT_NUMBER

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

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

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

netstat -na | find "1234"

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

Это, как уже упоминалось, здесь.

К вашему сведению / для всех, кто интересуется: это либо findstr 123456 (без кавычек), либо find "123456" (с кавычками). (@ Джош)

Kevin Cruijssen 13.06.2018 18:05

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

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

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

netstat -ano | findStr "8080"

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

tasklist /fi "pid eq 2216"

find process by TCP/IP port

Используйте приведенный ниже пакетный сценарий, который принимает имя процесса в качестве аргумента и выдает выходные данные 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

Netstat:

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

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

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

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

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

netstat -anon | findstr 1234

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

Следует отметить, что вам не нужно устанавливать дважды флаг -n. -ano достаточно.

mwieczorek 29.03.2019 21:56

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

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

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

Вероятно, вы не хотите автоматически убивать процесс. Я бы отделил эту команду kill и объяснил ее. Не хочу, чтобы какой-нибудь плохой пользователь скопировал это, не подумав внимательно.

TinkerTenorSoftwareGuy 19.02.2019 23:27

И если вы собираетесь использовать полное решение PowerShell, измените kill на Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process

CubanX 13.12.2019 19:02
  1. Откройте командную строку - Пуск → Пробегcmd или меню Пуск → Все программыАксессуарыКомандная строка.

  2. Тип

    netstat -aon | findstr '[port_number]'
    

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

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

    tasklist | findstr '[PID]'
    

Замените [PID] номером из предыдущего шага и нажмите Enter.

  1. Вам будет показано имя приложения, использующего номер вашего порта.

В Win 10: ваша команда на шагах 2 и 4 не будет работать, если вы не замените простые кавычки двойными кавычками. Следует сказать netstat -aon | findstr "[номер_порта]"

Leonardo Lopez 06.06.2019 21:34

Это решение не требует повышенного разрешения. Ткс!

Totalys 24.04.2020 21:15

Основываясь на ответах с Информация и убийство, мне полезно объединить их в одна команда. И вы можете запустить это из 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

Это может быть полезный сценарий. Однако я безуспешно пробовал это в CMD, а также в PowerShell 6. Возможно, вы могли бы улучшить свой ответ, предоставив немного больше деталей.

Manfred 16.12.2019 00:27

Первая часть работает? Проблема только с "битой"? Есть некоторые различия в передаче переменных: (%% i)

lczapski 21.12.2019 14:00

@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 23.12.2019 10:55

Извините, не повезло. Я поместил эту команду в файл с именем portInfo.bat в терминале PowerShell, а затем выполнил .\portInfo.bat 8080. На выходе было просто содержимое командного файла. Возможно, я что-то упускаю. Обратите внимание: я использую PowerShell 6.2.3 в Windows 10. Я также пробовал использовать его в обычной командной строке, но результат был таким же: вывод содержимого скрипта. Я уверен, что мне не хватает важной информации для работы.

Manfred 28.12.2019 10:15

@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 16:54

Почему бы не добавить /nh: @tasklist /nh /fi "pid eq %i"? И именно дверь: Findstr ":8080"

It Wasn't Me 19.05.2020 05:36

Найти pid, использующий порт 8000

netstat -aon | findstr '8000'

Чтобы убить этот процесс в окнах

taskkill /pid pid /f

где pid - это идентификатор процесса, который вы получаете от первой команды

netstat -aon | findstr 8000. Цитировать указывать не нужно.

Ali Rasouli 11.10.2020 20:28

PID - это значение, возвращаемое первой командой в последнем столбце.

Pran Kumar Sarkar 23.01.2021 12:38

Если кому-то нужен аналог для macOS, как я, вот он:

lsof -i tcp:8080

После того, как вы получите PID процесса, вы можете убить его с помощью:

kill -9 <PID>

Вы также можете проверить зарезервированные порты с помощью приведенной ниже команды. Например, Hyper-V зарезервировал несколько портов.

netsh int ipv4 show excludedportrange protocol=tcp

netstat -aof | findstr :8080 (поменять 8080 на любой порт)

Другие вопросы по теме