Как узнать, какой процесс прослушивает порт в Windows?
-
09-06-2019 - |
Вопрос
Как узнать, какой процесс прослушивает порт в Windows?
Решение
PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
cmd
C:\> netstat -a -b
(Добавлять -н чтобы он не пытался разрешить имена хостов, что сделает его намного быстрее.)
Обратите внимание на рекомендацию Дейна по поводу TCPView.Это выглядит очень полезно!
-а Отображает все соединения и порты прослушивания.
-б Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания.В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании порта подключения или прослушивания.В этом случае имя исполняемого файла находится в [] внизу, вверху — вызываемый им компонент и так далее, пока не будет достигнут TCP/IP.Обратите внимание, что этот вариант может занять много времени и не удастся, если у вас нет достаточных разрешений.
-н Отображает адреса и номера портов в числовой форме.
-о Отображает идентификатор процесса-владельца, связанный с каждым соединением.
Другие советы
Для Windows имеется собственный графический интерфейс:
- Пуск>>Все программы>>Стандартные>>Системные инструменты>>Монитор ресурсов
или Бегать resmon.exe
, или из Диспетчер задач вкладка производительность
Использовать TCPView если вам нужен графический интерфейс для этого.Это старое приложение Sysinternals, которое выкупила Microsoft.
netstat -aon | find /i "listening"
Переключатель -b, упомянутый в большинстве ответов, требует, чтобы у вас были права администратора на компьютере.Вам действительно не нужны повышенные права, чтобы получить имя процесса!
Найдите pid процесса, работающего по номеру порта (например, 8080).
netstat -ano | findStr "8080"
Найти имя процесса по pid
tasklist /fi "pid eq 2216"
Вы можете получить дополнительную информацию, если выполните следующую команду:
netstat -aon |find /i "listening" |find "port"
использование команды «Найти» позволяет фильтровать результаты.find /i «listening» отобразит только «прослушиваемые» порты.Обратите внимание: вам нужен /i, чтобы игнорировать регистр, иначе вы должны ввести find «LISTENING».|find "port" ограничит результаты только теми, которые содержат определенный номер порта.Обратите внимание: при этом он также будет фильтровать результаты, содержащие номер порта в любом месте строки ответа.
Откройте окно командной строки (от имени администратора). В поле «Пуск\Поиск» введите «cmd», затем щелкните правой кнопкой мыши «cmd.exe» и выберите «Запуск от имени администратора».
Введите следующий текст и нажмите Enter.
netstat -abno
-а Отображает все соединения и порты прослушивания.
-б Отображает исполняемый файл, участвующий в создании каждого подключения или прослушивания.В некоторых случаях хорошо известные исполняемые файлы проводят несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании подключения или порта прослушивания.В этом случае исполняемое имя находится в [] внизу, сверху является компонентом, который он вызвал, и т. Д. До тех пор, пока не будет достигнут TCP/IP.Обратите внимание, что эта опция может потребовать много времени и потерпит неудачу, если у вас нет достаточных разрешений.
-н Отображает адреса и номера портов в числовой форме.
-о Отображает идентификатор процесса-владельца, связанный с каждым соединением.
Найдите порт, который вы прослушиваете, в разделе «Локальный адрес».
Посмотрите на имя процесса прямо под ним.
ПРИМЕЧАНИЕ:Чтобы найти процесс в диспетчере задач
Обратите внимание на PID (идентификатор процесса) рядом с портом, который вы просматриваете.
Откройте диспетчер задач Windows.
Выберите вкладку «Процессы».
Найдите 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
Открой
command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt
.Тип
netstat -aon | findstr '[port_number]'
Замените [port_number] фактическим номером порта, который вы хотите проверить, и нажмите Enter.
- Если порт используется каким-либо приложением, будут показаны сведения об этом приложении.Число, отображаемое в последнем столбце списка, представляет собой PID (идентификатор процесса) этого приложения.Обратите внимание на это.
Тип
tasklist | findstr '[PID]'
Замените [PID] числом из предыдущего шага и нажмите Enter.
- Вам будет показано имя приложения, которое использует ваш номер порта.
В 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