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

1678

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

  • 9
    Множество ответов, даже не тот, который рассматривает это как вопрос программирования.
  • 1
    Currports - это инструмент, который помогает искать и фильтровать тоже nirsoft.net/utils/cports.html
Показать ещё 2 комментария
Теги:
networking
port

28 ответов

1784
Лучший ответ

PowerShell

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

CMD

 C:\> netstat -a -b

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

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

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

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

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

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

  • 204
    -О, чтобы получить PID
  • 94
    и taskkill / PID <pid>, чтобы затем завершить процесс, используя / F, если необходимо.
Показать ещё 16 комментариев
1772

Есть собственный GUI для Windows:

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

или Выполнить resmon.exe, или вкладку производительности TaskManager

Изображение 7221

  • 28
    Также показывает состояние брандмауэра привязки (последний столбец). Очень полезный
  • 9
    @data, единственная проблема в том, что пользовательский интерфейс для этой программы серьезно ужасен.
Показать ещё 10 комментариев
203

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

  • 6
    На мой взгляд, это лучший вариант, тем более что все процессы находятся в одном списке, и вы можете закрыть процессы, щелкнув по ним правой кнопкой мыши.
  • 3
    Кроме того, это не требует прав администратора!
Показать ещё 1 комментарий
152
netstat -aon | find /i "listening"
  • 4
    Я только что попробовал это, и он не показывает никакой информации о процессе.
  • 10
    "не показывает информацию о процессе", а? он показывает идентификаторы процессов всех процессов прослушивания. Если вам нужно название процесса, используйте решение Брэда
Показать ещё 6 комментариев
70

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

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

netstat -ano | findStr "8080"

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

tasklist /fi "pid eq 2216"

Изображение 7222

67

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

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

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

  • 7
    FWIW, пытающийся запустить это в PowerShell v2.0, выдает ошибку FIND: Parameter format not correct . Вам нужно добавить пробел после критерия поиска. Это оставит вас с netstat -aon | find /i "listening" | find "1234 " .
  • 2
    Замените "порт" выше на ваш порт, например, "5000"
Показать ещё 2 комментария
57
  • Откройте окно командной строки (в качестве администратора). В поле "Начало\Поиск" введите "cmd", затем щелкните правой кнопкой мыши "cmd.exe" и выберите "Запуск от имени администратора"

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

    netstat -abno

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

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

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

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

  • Найдите порт, который вы слушаете в разделе "Локальный адрес"

  • Посмотрите на имя процесса непосредственно под этим.

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

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

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

  • Перейдите на вкладку Процессы.

  • Посмотрите на PID, который вы отметили, когда вы сделали netstat на шаге 1.

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

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

43

Получить 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 th в этой строке) и передается в следующая команда

    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
    Согласовано! Это единственный ответ, который фильтрует по порту и не требует повышенных привилегий на вашем компьютере. Лучший ответ!
  • 1
    Действительно полезное решение
Показать ещё 1 комментарий
36

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

тип
netstat -n -a -o

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

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

taskkill/F/PID 3312

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

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

22

Очень просто получить номер порта из pid в окнах.

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

1) Перейдите в run → type cmd → нажмите enter.

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

netstat -aon | findstr [port number]

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

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

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

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

20

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

netstat -ao |find /i "listening"

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

Taskkill /F /IM pidof a process
  • 0
    это не учитывает прослушивание портов UDP
16

Просто откройте командную оболочку и введите: (если ваш порт равен 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
    "findstr" (не "find") работает для меня
  • 1
    К вашему сведению / для всех, кто заинтересован: либо findstr 123456 (без кавычек), либо find "123456" (с кавычками). (@Josh)
12

Если вы хотите использовать инструмент GUI для этого, SysInternals TCPView.

10

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

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

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

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

9

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

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

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

Я рекомендую CurrPorts из NirSoft.

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

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

  • 1
    Вау, это отлично. Я боролся с Resmon (взяв pid и используя его в Taskman, чтобы найти путь к исполняемому файлу).
5

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

netstat -anon | findstr 1234

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

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

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

netstat -bano | findstr "7002"

netstat -ano > ano.txt 

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

5

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

netstat -a -o Это показывает PID процесса, выполняющегося на определенном порту.

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

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

5

Следуйте этим инструментам: - от 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, который дает вам гораздо больше, чем вы можете знать.

Экзамен: -

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

Команда Above будет отображать весь список процессов каждые 5 секунд. Чтобы узнать больше, вы можете просто пойти с командой /? для окон, например,

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

и т.д. и т.д.:)

4

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

  • 0
    Спасибо, я искал программный способ!
2

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

1

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

netstat -na | find "1234"
0

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

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

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

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

Если смена порта не работает:

Шаг 1. Перейдите в сервисы, выполнив поиск "служб" в Windows.

Шаг 2: Закажите все услуги в алфавитном порядке (не обязательно)

Шаг 3: Остановить любые службы, связанные с MYSQL.

Шаг 4: Запустите mysql из xampp.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню