Как узнать, какой процесс прослушивает порт в 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

netstat -aon | find /i "listening"

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

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

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

netstat -ano | findStr "8080"

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

tasklist /fi "pid eq 2216"

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

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

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

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

  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.

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

Получить 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 и все.

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

Если кому-то нужен эквивалент для 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.

  1. Откройте командную строку - ПускВыполнитьcmd, или меню Пуск → Все программыСтандартныеКомандная строка.

  2. Тип

    netstat -aon | findstr '[port_number]'
    

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

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

    tasklist | findstr '[PID]'
    

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

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

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

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