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

StackOverflow https://stackoverflow.com/questions/48198

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

PowerShell

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

cmd

 C:\> netstat -a -b

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

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

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

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

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

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

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

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

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

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

enter image description here

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

netstat -aon | find /i "listening"

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

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

netstat -ano | findStr "8080"

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

tasklist /fi "pid eq 2216"

find process by TCP/IP port

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

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

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

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

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

    netstat -abno

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

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

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

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

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

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

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

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

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

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

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

    • Если вы не видите столбец 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

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

тип
нетстат -н -а -о

После выполнения этой команды в командной строке Windows (CMD) выберите PID, который, я думаю, последний столбец предполагает, что это 3312

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

Taskkill/F/PID 3312

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

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

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

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

1) Заходим в «Выполнить» -> набираем cmd -> нажимаем Enter.

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

netstat -aon | findstr [port number]

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

3) нажмите Enter...

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

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

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

netstat -ao |find /i "listening"

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

Taskkill /F /IM pidof a process

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

это как упоминалось здесь

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

С помощью 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
    

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

netstat -anon | findstr 1234

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

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

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

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

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

Этот ответ был первоначально опубликован в эта тема.

Я рекомендую CurrPorts от НирСофт.

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

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

Нетстат

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

    NetStat -Bano | Findstr "7002"

    netstat -ano > ano.txt

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

Следуйте этим инструментам: - Из cmd :- C:\> netstat -anob с Администратор привилегия.

http://technet.microsoft.com/en-us/sysinternals/bb896653 - Обозреватель процессов

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.

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

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

Мне помогает однострочное решение: просто замените 3000 на свой порт.

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

  1. Открой command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt.

  2. Тип

    netstat -aon | findstr '[port_number]'

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

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

    tasklist | findstr '[PID]'

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

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

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

netstat -na | find "1234"

Используйте приведенный ниже пакетный скрипт, который принимает имя процесса в качестве аргумента и выдает выходные данные 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top