Como você pode descobrir qual processo está escutando em uma porta no Windows?
-
09-06-2019 - |
Pergunta
Como você pode descobrir qual processo está escutando em uma porta no Windows?
Solução
PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
cmd
C:\> netstat -a -b
(Adicionar -n para impedi-lo de tentar resolver nomes de host, o que tornará tudo muito mais rápido.)
Observe a recomendação de Dane para Visualização TCP.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 bem conhecidos hospedam vários componentes independentes e, nesses casos, a sequência de componentes envolvidos na criação da conexão ou porta de escuta é exibida.Neste caso o nome do executável está em [] na parte inferior, na parte superior está o componente que ele chamou e assim por diante até que o TCP/IP seja alcançado.Observe que esta 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.
Outras dicas
Existe uma GUI nativa para Windows:
- Iniciar>>Todos os Programas>>Acessórios>>Ferramentas do Sistema>>Monitor de Recursos
ou Correr resmon.exe
, ou de Gerenciador de tarefas guia desempenho
Usar Visualização TCP se você quiser uma GUI para isso.É o antigo aplicativo Sysinternals que a Microsoft comprou.
netstat -aon | find /i "listening"
A opção -b mencionada na maioria das respostas exige 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 'Listening'.Observe que você precisa de /i para ignorar Case, caso contrário você digitaria find "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 que possuem o número da porta em qualquer lugar da string de resposta.
Abra uma janela de prompt de comando (como administrador) Em "Iniciar caixa de pesquisa" Digite "cmd", clique com o botão direito em "cmd.exe" e selecione "Executar como administrador"
Digite o seguinte texto 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 conexão ou porta de escuta é exibida.Nesse caso, o nome executável está em [] na parte inferior, na parte superior é o componente chamado e assim por diante até que o TCP/IP fosse atingido.Observe que esta opção pode demorar muito 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 dele.
OBSERVAÇÃO:Para encontrar o processo no Gerenciador de Tarefas
Observe o PID (identificador de processo) próximo à porta que você está vendo.
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.
Certifique-se de que “Mostrar processos de todos os usuários” esteja selecionado.
Obtenha 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 9000
deve ser substituído pelo seu número de porta.
O saída conterá algo assim:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Explicação:
ele itera em cada linha 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 é o5
º elemento nessa linha) e passado para o seguinte comandotasklist /FI "PID eq 5312"
Se você quiser pular o cabeçalho e o retorno do prompt de comando, você pode usar:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Saída:
java.exe 5312 Services 0 130,768 K
Primeiro, encontramos o ID do processo daquela tarefa específica que precisamos eliminar para obter a porta livre
tipo
netstat -n -a -o
Depois de executar este comando no Windows Command Line Prompt (CMD) Selecione o PID que eu acho que a última coluna suponha que este seja 3312
Agora digite
taskkill /F /PID 3312
Agora você pode verificar digitando o comando netstat.
OBSERVAÇÃO:Às vezes, o Windows não permite que você execute este comando diretamente no CMD, então primeiro você precisa seguir com essas etapas do prompt de comando start-> (clique com o botão direito do mouse no prompt de comando e execute como administrador)
É muito simples obter o número da porta do 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]
(Observação:Não inclua colchetes.)
3) pressione enter...
4) Em seguida, o cmd fornecerá os detalhes do serviço em execução naquela porta junto com o pid.
5) Abra o gerenciador de tarefas e clique na aba de serviço e combine o pid com o do cmd e pronto.
Para obter uma lista de todos os IDs de processo proprietários associados a cada conexão:
netstat -ao |find /i "listening"
Se quiser matar algum processo tenha o id e use este comando, para que a porta fique livre
Taskkill /F /IM pidof a process
Basta abrir um shell de comando e digitar:(dizendo que sua porta é 123456)
netstat -a -n -o | find "123456"
Você verá tudo 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
isso é como mencionado aqui
Se você quiser usar uma ferramenta GUI para fazer isso, há SysInternals TCPView.
Com o PowerShell 5 no Windows 10 ou Windows Server 2016, execute Get-NetTCPConnection
cmdlet.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.O imóvel que você procura é OwningProcess
.
Se você quiser descobrir o ID do processo que está escutando 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ê quiser descobrir o 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
Para descobrir qual processo específico (PID) está usando qual porta:
netstat -anon | findstr 1234
Onde 1234 é o PID do seu processo.[Vá para Gerenciador de Tarefas -> aba Serviços/Processos para descobrir o PID da sua aplicação]
netstat -ao
e netstat -ab
informará o aplicativo, mas se você não for administrador, receberá "A operação solicitada requer elevação".
Não é o ideal, mas se você usar o sysinternals Process Explorer, poderá acessar as propriedades de processos específicos e consultar a guia TCP para ver se eles estão usando a porta de seu interesse.É meio que uma coisa de agulha e palheiro, mas talvez ajude alguém...
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 postada originalmente em este tópico.
Eu recomendo Portas Atual da NirSoft.
CurrPorts pode filtrar os resultados exibidos. Visualização TCP não possui esse recurso.
Observação:Você pode clicar com o botão direito 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 problemas de conectividade que tenho com o Outlook e o Lync depois de trocar de VPN.Com CurrPorts, você também pode fechar conexões na linha de comando com o parâmetro "/close".
Netstat
- -a exibe todas as portas de conexão e escuta
- -b exibe executáveis
- -n parar de resolver nomes de host (formato numérico)
-o processo de propriedade
netstat -bano | Findstr "7002"
netstat -ano > ano.txt
Atualidades ferramenta ajuda a pesquisar e filtrar
Siga estas ferramentas: - De cmd :- C:\> netstat -anob
com Administrador privilégio.
http://technet.microsoft.com/en-us/sysinternals/bb896653 - Explorador de Processos
http://technet.microsoft.com/en-us/sysinternals/bb896645 - Despejo de processo
http://technet.microsoft.com/en-us/sysinternals/bb896644 - Monitor de Porta
Tudo em sysinternals.com
Se você deseja apenas conhecer a execução do processo e os threads de cada processo, recomendo aprender sobre wmic
.Maravilhosa ferramenta de linha cmd, que oferece muito mais do que você pode imaginar.
Exemplo: -
c:\> wmic process list brief /every:5
O comando acima mostrará toda a lista de processos resumidamente a cada 5 segundos.Para saber mais, você pode simplesmente ir com /?
comando do windows, por exemplo,
c:\>wmic /?
c:\>wmic process /?
c:\>wmic prcess list /?
e assim por diante.:)
netstat -a -o Isso mostra o PID do processo em execução em uma porta específica.
Tenha em mente o ID do processo e vá para Gerenciador de tarefas e serviços ou guia de detalhes e finalize o processo que possui o mesmo PID.
Assim, você pode encerrar um processo em execução em uma porta específica do Windows.
Para quem usa 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
Usando Powershell...
...este seria seu amigo (substitua 8080 pelo número da sua porta):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Exemplo de saída
> 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, tnslsnr.exe (banco de dados OracleXE) está escutando na porta 8080.
Explicação rápida
Select-String
é usado para filtrar a saída longa de netstat
para as linhas relevantes.
-Pattern
testa cada linha em relação a uma expressão regular.
-Context 0,1
produzirá 0 linhas iniciais e 1 linha final para cada correspondência de padrão.
Programaticamente, você precisa de coisas de iphlpapi.h, por exemplo GetTcpTable2().Estruturas como MIB_TCP6ROW2 contém o PID do proprietário.
Uma solução de linha única que me ajuda é essa, basta substituir 3000 pela sua porta
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; kill $P.Id
Abra o
command prompt - start » run » cmd or start » All Programs » Accessories » Command Prompt
.Tipo
netstat -aon | findstr '[port_number]'
Substitua [port_number] pelo número da porta real que você deseja verificar e pressione Enter.
- Se a porta estiver sendo usada por algum aplicativo, os detalhes desse aplicativo serão mostrados.O número, que aparece na última coluna da lista, é o PID (ID do processo) dessa aplicação.Anote isso.
Tipo
tasklist | findstr '[PID]'
Substitua o [PID] pelo número da etapa acima e pressione Enter.
- Será mostrado o nome do aplicativo que está usando seu número de porta.
No Windows, se você quiser encontrar coisas escutando ou conectadas à porta 1234, execute o seguinte no prompt do cmd:
netstat -na | find "1234"
Use o script em lote abaixo, que usa um nome de processo como argumento e fornece saída netstat 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