Como você pode descobrir qual processo está escutando uma porta no Windows?


2274

Como você pode descobrir qual processo está escutando uma porta no Windows?


3
CurrPorts é uma ferramenta que ajuda a procurar + filtro também nirsoft.net/utils/cports.html
— Nuvens azuis

1
Eu deparei com isso enquanto tentava executar o Tomcat no modo de depuração no IntelliJ, a melhor solução para mim foi alterar a configuração do transporte de depuração (Arquivo-> Configurações-> Compilar / exe / implantar-> Depurador) de "socket" para "memoria compartilhada".
— TMN

Respostas:


2624

Nova resposta, PowerShell

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

Resposta antiga, cmd

 C:\> netstat -a -b

(Adicione -n para interromper a tentativa de resolver nomes de host, o que tornará muito mais rápido.)

Nota Recomendação de Dane para TCPView . Parece muito útil!

-a Exibe todas as conexões e portas de escuta.

-b Exibe o executável envolvido na criação de cada conexão ou porta de escuta. Em alguns casos, executáveis ​​conhecidos hospedam vários componentes independentes e, nesses casos, a sequência de componentes envolvidos na criação da porta de conexão ou de escuta é exibida. Nesse caso, o nome do executável está em [] na parte inferior, na parte superior está o componente chamado e assim por diante até o TCP / IP ser atingido. Observe que essa opção pode ser demorada e falhará, a menos que você tenha permissões suficientes.

-n Exibe endereços e números de porta em formato numérico.

-o Exibe o ID do processo proprietário associado a cada conexão.


252
-o para obter o PID
— Laurent K

121
e taskkill / PID <pid> para finalizar o processo, usando / F, se apropriado.
— BitMask777

81
Pode ser necessário executar o shell da linha de comando como administrador, caso contrário, você poderá receber uma mensagem de erro sobre privilégios insuficientes. Use a opção "Executar como administrador" ao clicar com o botão direito do mouse em cmd.exe.
— Gruber

6
Funciona, mas requer permissão elevada. Shift + clique direito no ícone de comando -> Executar como administrador
— Christian Bongiorno

18
Depois de obter o PID - digamos que seja 1234-, você poderá tasklist /fi "pid eq 1234"descobrir o nome e outros detalhes do processo.
— Steve Chambers

2203

Há uma GUI nativa para Windows:

  • Menu Iniciar → Todos os programas → Acessórios → Ferramentas do sistema → Monitor de recursos

Ou Executar resmon.exe , ou na guia Desempenho do Gerenciador de Tarefas .

Enter image description here


41
Também mostra o status do firewall da ligação (última coluna). Very util.
— Raphael

8
Você precisa ser um administrador (ou nesse grupo) para executar isso.
— precisa saber é o seguinte

2
@ bcorso, o que significa a ligação ao " endereço não especificado "?
— Pacerier 22/01

5
Também pode ser iniciado a partir guia Desempenho do Gerenciador de Tarefas, pelo menos no Windows 10. (não tenho verificado outras versões.)
— Mathieu K.

10
O comentário de @ user4836454 acima NÃO está correto: O Monitor de Recursos mostra portas com ouvintes, mesmo se não houver conexão de rede com essas portas. Basta olhar na seção "Portas de escuta" em vez da seção "Conexões TCP".
— Jpsy

235

Use o TCPView se desejar uma GUI para isso. É o antigo aplicativo Sysinternals que a Microsoft comprou.


9
Essa é a melhor opção, especialmente porque todos os processos estão na mesma lista e você pode fechar os processos diretamente clicando com o botão direito do mouse neles.
— Andreas Lundgren

8
Além disso, isso não requer privilégios de administrador!
— Janac Meena

222

Para Windows:

netstat -aon | find /i "listening"

25
+1 Mas lembre-se de que, se o seu Windows funcionar em um idioma que não seja o inglês, você precisará alterar "ouvir" o termo nativo. Por exemplo, netstat -aon | find /i "abhören"para alemão.
— Levite

2
No meu caso, não funcionou, talvez por causa do sinal de aspas, mas a solução netstat -aon | O findstr LISTENING funciona perfeitamente!
— The Godfather

Isso funciona sem exigir privilégios elevados tão votados.
— Vlad Schnakovszki 2/17/17

1
Estou recebendo um erro ao tentar executar este comando no W10 15063.729 com o PowerShell:FIND: Parameter format not correct
— Nicke Manarin

1
Como essa resposta é relevante para "descobrir qual processo [nome] está escutando em uma porta no Windows?"
— Pawel Cioch

137

A opção -b mencionada na maioria das respostas requer que você tenha privilégios administrativos na máquina. Você realmente não precisa de direitos elevados para obter o nome do processo!

Encontre o pid do processo em execução no número da porta (por exemplo, 8080)

netstat -ano | findStr "8080"

Encontre o nome do processo por pid

tasklist /fi "pid eq 2216"

encontrar processo pela porta TCP / IP


82

Você pode obter mais informações se executar o seguinte comando:

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

usar o comando 'Localizar' permite filtrar os resultados. find /i "listening"exibirá apenas as portas que estão 'ouvindo'. Observe que você precisa /iignorar maiúsculas e minúsculas; caso contrário, digite "LISTENING". | find "port"limitará os resultados apenas àqueles que contêm o número da porta específico. Observe que isso também filtrará os resultados com o número da porta em qualquer lugar da sequência de respostas.


8
FWIW tentando executar isso no PowerShell v2.0 gera erro FIND: Parameter format not correct. Você precisa adicionar um espaço após os critérios de localização. Isso vai deixar você com netstat -aon | find /i "listening" | find "1234 ".
— eu.

2
Substitua "port" acima por sua porta, ex "5000"
— jbooker

1
@auto. Ainda recebo esse erro no PS 5.1, mesmo depois de adicionar o espaço após o pipe. Você sabe o que está acontecendo?
— Nicke Manarin

2
O @NickeManarinin & @self muda primeiro de powershell para cmd (basta digitar cmd e pressione enter e refazer o comando) ou, no powershell, use este comando: netstat -aon | find / i " {back tick}" listening {back tick}"" | find " {back tick}" port {back tick}" "(<- observe as aspas que escaparam - desculpe o termo, back tickpois eu não posso adicionar o caractere real, pois ele acha que é um recorte)"
— Tristan van Dam

72
  1. Abra uma janela do prompt de comando (como administrador) Em "Iniciar \ caixa de pesquisa", digite "cmd" e clique com o botão direito do mouse em "cmd.exe" e selecione "Executar como administrador"

  2. Digite o texto a seguir e pressione Enter.

    netstat -abno

    -a Exibe todas as conexões e portas de escuta.

    -b Exibe o executável envolvido na criação de cada conexão ou porta de escuta. Em alguns casos, executáveis ​​conhecidos hospedam vários componentes independentes e, nesses casos, a sequência de componentes envolvidos na criação da porta de conexão ou de escuta é exibida. Nesse caso, o nome do executável está em [] na parte inferior, na parte superior está o componente chamado e assim por diante até o TCP / IP ser atingido. Observe que essa opção pode ser demorada e falhará, a menos que você tenha permissões suficientes.

    -n Exibe endereços e números de porta em formato numérico.

    -o Exibe o ID do processo proprietário associado a cada conexão.

  3. Encontre a porta que você está ouvindo em "Endereço local"

  4. Veja o nome do processo diretamente abaixo.

NOTA: Para encontrar o processo no Gerenciador de tarefas

  1. Observe o PID (identificador do processo) próximo à porta que você está visualizando.

  2. Abra o Gerenciador de tarefas do Windows.

  3. Selecione a guia Processos.

  4. Procure o PID que você anotou quando fez o netstat na etapa 1.

    • Se você não vir uma coluna PID, clique em Exibir / selecionar colunas. Selecione PID.

    • Verifique se a opção "Mostrar processos de todos os usuários" está selecionada.


56

Obter PID e nome da imagem

Use apenas um comando:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

onde 9000deve ser substituído pelo número da sua porta.

A saída conterá algo como isto:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

Explicação:

  • itera através de todas as linhas da saída do seguinte comando:

    netstat -aon | findstr 9000
    
  • de cada linha, o PID ( %a- o nome não é importante aqui) é extraído (PID é o elemento 5th nessa linha) e passado para o seguinte comando

    tasklist /FI "PID eq 5312"
    

Se você quiser pular o cabeçalho e o retorno do prompt de comando , poderá usar:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

Resultado:

java.exe                      5312 Services                   0    130,768 K

2
Boa resposta, mas você deve alterá-lo para findstr :9000caso contrário, você encontrará aplicativos que contêm o número (por exemplo, ao pesquisar "80", você encontrará aplicativos nas portas 80, 800, 8000 também).
— Radon8472

48

Primeiro, encontramos o ID do processo dessa tarefa específica que precisamos eliminar para liberar a porta:

Tipo

netstat -n -a -o

Depois de executar este comando no prompt da linha de comando do Windows (cmd), selecione o pid que eu acho que a última coluna. Suponha que seja 3312.

Agora digite

taskkill /F /PID 3312

Agora você pode fazer a verificação cruzada digitando o netstat comando

NOTA: às vezes, o Windows não permite que você execute este comando diretamente no CMD; portanto, primeiro você precisa seguir estas etapas:

No menu Iniciar -> prompt de comando (clique com o botão direito do mouse no prompt de comando e execute como administrador)


30

Para obter uma lista de todos os IDs de processos proprietários associados a cada conexão:

netstat -ao |find /i "listening"

Se quiser matar qualquer processo, tenha o ID e use este comando, para que a porta fique livre

Taskkill /F /IM PID of a process

1
isso não conta para escutar portas UDP
— evandrix

27

É muito simples obter o número da porta de um PID no Windows.

A seguir estão as etapas:

  1. Vá para executar → digite cmd → pressione Enter.

  2. Escreva o seguinte comando ...

    netstat -aon | findstr [port number]
    

    (Nota: não inclua colchetes.)

  3. Pressione Enter...

  4. Em seguida, o cmd fornecerá os detalhes do serviço em execução nessa porta junto com o PID.

  5. Abra o Gerenciador de tarefas, clique na guia Serviço e combine o PID com o do cmd, e é isso.


18

Basta abrir um shell de comando e digite (dizendo que sua porta é 123456):

netstat -a -n -o | find "123456"

Você verá tudo o que precisa.

Os cabeçalhos são:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

Isto é como mencionado aqui .


1
FYI / para qualquer pessoa interessada: é findstr 123456(sem aspas) ou find "123456"(com aspas). (@Josh)
— Kevin Cruijssen

18

Para descobrir qual processo específico (PID) está usando qual porta:

netstat -anon | findstr 1234

Onde 1234 é o PID do seu processo. [Vá para o Gerenciador de tarefas → guia Serviços / processos para descobrir o PID do seu aplicativo.]


1
Deve-se observar que você não precisa do -nsinalizador definido duas vezes. -anobasta.
— mwieczorek 29/03/19

16

Com o PowerShell 5 no Windows 10 ou Windows Server 2016, execute o Get-NetTCPConnectioncmdlet. Eu acho que também deve funcionar em versões mais antigas do Windows.

A saída padrão de Get-NetTCPConnectionnão inclui o ID do processo por algum motivo e é um pouco confuso. No entanto, você sempre pode obtê-lo formatando a saída. A propriedade que você está procurando é OwningProcess.

  • Se você deseja descobrir o ID do processo que está atendendo na porta 443, execute este comando:

    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
    
  • Formate a saída em uma tabela com as propriedades que você procura:

    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
    
  • Se você deseja descobrir um nome do processo, execute este comando:

    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
    


13

Digite o comando: netstat -aon | findstr :DESIRED_PORT_NUMBER

Por exemplo, se eu quiser encontrar a porta 80: netstat -aon | findstr :80

Esta resposta foi originalmente publicada nesta pergunta .


11

Netstat:

  • -a exibe todas as portas de conexão e escuta
  • -b exibe executáveis
  • -n para resolver nomes de host (formato numérico)
  • -o processo de propriedade

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

A ferramenta Currports ajuda a pesquisar e filtrar


11
  1. Abra o prompt de comando - inicie → Executar → cmdou menu Iniciar → Todos os programas → Acessórios → Prompt de comando .

  2. Tipo

    netstat -aon | findstr '[port_number]'
    

Substitua pelo [port_number]número da porta real que você deseja verificar e pressione Enter.

  1. Se a porta estiver sendo usada por qualquer aplicativo, os detalhes desse aplicativo serão mostrados. O número, mostrado na última coluna da lista, é o PID (ID do processo) desse aplicativo. Anote isso.
  2. Tipo

    tasklist | findstr '[PID]'
    

Substitua o [PID]número pela etapa acima e pressione Enter.

  1. Você verá o nome do aplicativo que está usando o número da porta.

3
No Win 10: Seu comando nas etapas 2 e 4 não funciona, a menos que você substitua aspas simples por aspas duplas. Deveria dizer netstat -aon | findstr "[port_number]"
— Leonardo Lopez

Esta solução não requer permissão elevada. Tks!
— Totalys 24/04

10

netstat -aoe netstat -abinforme o aplicativo, mas se você não for um administrador do sistema, receberá "A operação solicitada requer elevação".

Não é o ideal, mas se você usar o Process Explorer da Sysinternals, poderá acessar as propriedades de processos específicos e ver a guia TCP para ver se eles estão usando a porta na qual você está interessado. É um pouco de agulha e palheiro coisa, mas talvez ajude alguém ...


Se você não for um administrador, não poderá usar o Process Explorer (ou mesmo o Windows Task Manager> Resource Manager) para obter essas informações de qualquer processo que não seja seu, para começar.
— Abel

9

Eu recomendo CurrPorts da NirSoft.

CurrPorts pode filtrar os resultados exibidos. O TCPView não possui esse recurso.

Nota: Você pode clicar com o botão direito do mouse na conexão de soquete de um processo e selecionar "Fechar conexões TCP selecionadas" (você também pode fazer isso no TCPView). Isso geralmente corrige os problemas de conectividade que tenho com o Outlook e o Lync depois de mudar de VPN. Com CurrPorts, você também pode fechar conexões da linha de comando com o parâmetro "/ close".


7

Uma solução de linha única que me ajuda é essa. Apenas substitua 3000 por sua porta:

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

Editar: alterado killpara Stop-Processpara um idioma mais semelhante ao PowerShell


6
Você provavelmente não quer matar o processo automaticamente. Eu separaria esse comando de matar e o explicaria. Não queira que um usuário pobre copie e cole isso sem pensar com cuidado.
— TinkerTenorSoftwareGuy

1
E se você estiver Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
— procurando pela

6

Siga estas ferramentas: No cmd : C:\> netstat -anobcom privilégios de administrador .

Process Explorer

Process Dump

Monitor de porta

Todos de sysinternals.com.

Se você quiser apenas conhecer o processo em execução e os threads em cada processo, recomendo que você aprenda wmic. É uma ferramenta de linha de comando maravilhosa, que oferece muito mais do que você pode saber.

Exemplo:

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

O comando acima mostrará uma lista de todos os processos em breve a cada 5 segundos. Para saber mais, você pode simplesmente usar o /?comando do Windows, por exemplo,

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

E assim por diante. :)


O PortMon (o link por trás do Port Monitor) é para monitorar portas seriais e paralelas , não portas de rede.
— James

6

Usar:

netstat -a -o

Isso mostra o PID do processo em execução em uma porta específica.

Lembre-se do ID do processo e vá para o Gerenciador de tarefas e a guia Serviços ou Detalhes e termine o processo com o mesmo PID.

Assim, você pode matar um processo em execução em uma porta específica do Windows.


6

Para aqueles que usam o PowerShell, tente 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

Usando o PowerShell ... ... este seria seu amigo (substitua 8080 pelo número da porta):

 netstat -abno | Select-String -Context 0,1 -Pattern 8080

Saída de amostra

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]

Portanto, neste exemplo, o tnslsnr.exe (banco de dados OracleXE) está escutando na porta 8080.

Explicação rápida

  • Select-Stringé usado para filtrar a saída longa das netstatlinhas relevantes.
  • -Pattern testa cada linha contra uma expressão regular.
  • -Context 0,1 produzirá 0 linhas iniciais e 1 linha final para cada correspondência de padrão.

2

No Windows, se você deseja encontrar coisas que estão ouvindo ou conectadas à porta 1234, execute o seguinte no prompt de cmd:

netstat -na | find "1234"

1

Use o script em lotes abaixo, que usa um nome de processo como argumento e fornece netstatsaída para o processo.

@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

1

Com base em respostas com informações e kill , para mim é útil combiná-las em um único comando . E você pode executar isso a partir do cmd para obter informações sobre o processo que escuta em determinada porta (exemplo 8080):

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"

Ou se você quiser matá-lo:

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i

Você também pode colocar esses comandos em um arquivo bat (eles serão um pouco diferentes - substitua %ipor %%i):

Arquivo portInfo.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"

Arquivo portKill.bat

for /f "tokens=3 delims=LISTENING" %%i  in (
    'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i

Então, do cmd, você pode fazer isso:

portInfo.bat 8080

ou

portKill.bat 8080


1
Este pode ser um script útil. No entanto, tentei no CMD e no PowerShell 6 sem sorte. Talvez você possa melhorar sua resposta, fornecendo um pouco mais de detalhes.
— Manfred

A primeira parte está funcionando? É apenas um problema com "morcego"? Existem algumas diferenças nas variáveis ​​de passagem: (%% i)
— lczapski

@Manfred Eu tentei isso em 3 diferentes Windows 10. Por exemplo, .\portInfo.bat 800no PowerShell, é algo parecido com isto: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

Desculpe, sem sorte. Coloquei esse comando em um arquivo nomeado portInfo.batem um terminal do PowerShell e, em seguida, executei .\portInfo.bat 8080. A saída foi apenas o conteúdo do arquivo em lotes. Muito bem possível, estou olhando para algo. Observe que estou usando o PowerShell 6.2.3 no Windows 10. Também tentei em um prompt de comando regular, mas o resultado foi o mesmo: Saída do conteúdo do script. Tenho certeza de que estou perdendo uma informação crucial para fazer esse trabalho.
— Manfred

1
Por que não adicionar /nh: @tasklist /nh /fi "pid eq %i"? E precisamente a porta:Findstr ":8080"
— Não fui eu

0

No meu caso, a porta (3000) não foi usada e não é visível no netstat. Mas! O desinstalador Docker para Windows resolveu o problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.