Como você pode descobrir qual processo está escutando uma porta no Windows?
Como você pode descobrir qual processo está escutando uma porta no Windows?
Respostas:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
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.
1234
-, você poderá tasklist /fi "pid eq 1234"
descobrir o nome e outros detalhes do processo.
Há uma GUI nativa para Windows:
Ou Executar resmon.exe
, ou na guia Desempenho do Gerenciador de Tarefas .
Use o TCPView se desejar uma GUI para isso. É o antigo aplicativo Sysinternals que a Microsoft comprou.
Para Windows:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
para alemão.
FIND: Parameter format not correct
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"
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 /i
ignorar 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.
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 "
.
{back tick}
" listening {back tick}
"" | find " {back tick}
" port {back tick}
" "(<- observe as aspas que escaparam - desculpe o termo, back tick
pois eu não posso adicionar o caractere real, pois ele acha que é um recorte)"
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"
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.
Encontre a porta que você está ouvindo em "Endereço local"
Veja o nome do processo diretamente abaixo.
NOTA: Para encontrar o processo no Gerenciador de tarefas
Observe o PID (identificador do processo) próximo à porta que você está visualizando.
Abra o Gerenciador de tarefas do Windows.
Selecione a guia Processos.
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.
Use apenas um comando:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
onde 9000
deve 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 5
th 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
findstr :9000
caso 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).
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)
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
É muito simples obter o número da porta de um PID no Windows.
A seguir estão as etapas:
Vá para executar → digite cmd → pressione Enter.
Escreva o seguinte comando ...
netstat -aon | findstr [port number]
(Nota: não inclua colchetes.)
Pressione Enter...
Em seguida, o cmd fornecerá os detalhes do serviço em execução nessa porta junto com o PID.
Abra o Gerenciador de tarefas, clique na guia Serviço e combine o PID com o do cmd, e é isso.
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 .
findstr 123456
(sem aspas) ou find "123456"
(com aspas). (@Josh)
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.]
-n
sinalizador definido duas vezes. -ano
basta.
Com o PowerShell 5 no Windows 10 ou Windows Server 2016, execute o Get-NetTCPConnection
cmdlet. Eu acho que também deve funcionar em versões mais antigas do Windows.
A saída padrão de Get-NetTCPConnection
nã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
Se você deseja usar uma ferramenta GUI para fazer isso, existe o TCPView da Sysinternals .
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 .
Netstat:
-o processo de propriedade
netstat -bano | findstr "7002"
netstat -ano > ano.txt
A ferramenta Currports ajuda a pesquisar e filtrar
Abra o prompt de comando - inicie → Executar → cmd
ou menu Iniciar → Todos os programas → Acessórios → Prompt de comando .
Tipo
netstat -aon | findstr '[port_number]'
Substitua pelo [port_number]
número da porta real que você deseja verificar e pressione Enter.
Tipo
tasklist | findstr '[PID]'
Substitua o [PID]
número pela etapa acima e pressione Enter.
netstat -ao
e netstat -ab
informe 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 ...
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".
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 kill
para Stop-Process
para um idioma mais semelhante ao PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Siga estas ferramentas: No cmd : C:\> netstat -anob
com privilégios de administrador .
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. :)
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.
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
Programaticamente, você precisa de coisas do iphlpapi.h , por exemplo, GetTcpTable2 (). Estruturas como MIB_TCP6ROW2 contêm o proprietário PID.
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 netstat
linhas 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.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"
Use o script em lotes abaixo, que usa um nome de processo como argumento e fornece netstat
saí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
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 %i
por %%i
):
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
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
.\portInfo.bat 800
no 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
portInfo.bat
em 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.
/nh
: @tasklist /nh /fi "pid eq %i"
? E precisamente a porta:Findstr ":8080"
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.