netstat com nome do processo?

42

Usando netstat -a -o -n , posso obter a lista de portas e PID

então eu preciso ir ao gerenciador de tarefas e adicionar o PID e ver quem é. (muito frustrante)

Fiquei me perguntando se existe um comando CMD que faz tudo (usando find , for , powershell )

para que eu possa obter o nome do processo

    
por Eris 26.01.2014 / 17:07

6 respostas

49

Solução

Use o parâmetro -b :

  -b            Displays the executable involved in creating each connection or
                listening port. In some cases well-known executables host
                multiple independent components, and in these cases the
                sequence of components involved in creating the connection
                or listening port is displayed. In this case the executable
                name is in [] at the bottom, on top is the component it called,
                and so forth until TCP/IP was reached. Note that this option
                can be time-consuming and will fail unless you have sufficient
                permissions.

Observação O comando netstat -b falhará, a menos que seja executado a partir de um prompt de comando elevado.

Solução alternativa

Filtre a lista de processos e encontre o PID de seu interesse:

tasklist | findstr /c:"PID"  

Solução alternativa

Você pode usar Tcpvcon.exe . Não são necessários direitos de administrador.

Tcpvcon usage is similar to that of the built-in Windows netstat utility.

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

 -a Show all endpoints (default is to show established TCP connections).
 -c Print output as CSV.
 -n Don't resolve addresses.
    
por 26.01.2014 / 19:06
6

Acho que você está procurando TCPView da SysInternals.

    
por 26.01.2014 / 17:12
2

Este é um exemplo de janelas que usam FOR para analisar netstat output e, em seguida, DO tasklist com /fi filter no pid para mostrar o nome do processo.

A última descoberta é remover tasklist cabeçalhos.

FOR /F "usebackq tokens=5 delims= " %i IN ('netstat -ano ^|find "443"') DO @tasklist /fi "pid eq %i" | find "%i"

imprime registros como

tomcat8.exe.x64               4240 Services                   0    931,864 K

Campos adicionais de netstat podem ser adicionados adicionando tokens.

    
por 13.05.2016 / 04:17
2

Se você gosta de usar o PS, pode usar esse código (nota: é super básico)

$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
    # make split easier PLUS make it a string instead of a match object:
    $p = $n -replace ' +',' '
    # make it an array:
    $nar = $p.Split(' ')
    # pick last item:
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path
    # print the modified line with processname instead of PID:
    $n -replace "$($nar[-1])","$($ppath) $($pname)"
}

Observe que você pode tentar Path em vez de ProcessName para obter um caminho completo para o executável - ele não funcionará com os serviços do sistema. Além disso, você pode querer acrescentar o ProcessName ao final da linha em vez de substituir o valor PID.

Aprecie;)

    
por 07.03.2016 / 23:14
0

Muito bom Erik Bitemo! Eu estava pensando em adicionar uma variável para o caminho, então eu percebi que você já tem isso, embora não tenha sido definido. Então o código que eu reutilizei foi:

$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
    {
# make split easier PLUS make it a string instead of a match object
    $p = $n -replace ' +',' ';
# make it an array
    $nar = $p.Split(' ')
# pick last item...
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
    $n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
     }

Eu estava tentando encontrar os processos e serviços para um aplicativo em que usei um liner 2 diferente.

Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto

Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto
    
por 07.10.2017 / 14:37
0

Tente usar isso ...

Nome do processo com carimbo de data / hora :) no delineador ... não é necessário criar scripts com rapidez e facilidade ...

Você pode alterar o parâmetro SYN_SENT por ESTABLISHED ou LISTENING

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp
    
por 11.02.2018 / 11:10