2014-01-26 16:07:42 +0000 2014-01-26 16:07:42 +0000
46
46

netstat con il nome del processo?

Usando netstat -a -o -n posso ottenere l'elenco delle porte e il PID

poi devo andare in task manager e aggiungere il PID e vedere chi è. (abbastanza frustrante)

Mi chiedevo se c'è un comando CMD che fa tutto questo (usando find , for , powershell)

in modo che io possa ottenere il nome del processo

Risposte (6)

56
56
56
2014-01-26 18:06:00 +0000

Soluzione

Usa il parametro -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.

Nota Il comando netstat -b fallirà se non viene eseguito da un prompt dei comandi elevato.

Workaround

Filtra la lista dei processi e trova il PID che ti interessa:

tasklist | findstr /c:"PID"

Soluzione alternativa

Puoi usare invece Tcpvcon.exe. Non sono richiesti diritti di amministratore.

Tcpvcon l'uso è simile a quello dell'utilità integrata di Windows netstat.

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.
8
8
8
2014-01-26 16:12:23 +0000

Penso che tu stia cercando TCPView di SysInternals.

2
2
2
2016-05-13 02:17:35 +0000

Ecco un esempio per windows usando FOR per analizzare l'output netstat poi DO tasklist con filtro /fi su pid per mostrare il nome del processo.

L'ultima trovata è rimuovere le intestazioni di tasklist.

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

stampa l'output dei record come

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

Ulteriori campi da netstat possono essere aggiunti aggiungendo token.

2
2
2
2016-03-07 22:14:01 +0000

Se ti piace usare PS, puoi biforcare questo codice (nota: è super-basico)

$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)"
}

Nota che puoi provare Path invece di ProcessName per ottenere un percorso eseguibile completo - non funzionerà però con i servizi di sistema. Inoltre, potresti voler aggiungere lo ProcessName alla fine della linea invece di sostituire il valore PID.

Buon divertimento ;)

1
1
1
2018-02-11 10:10:26 +0000

Prova a usare questo…

Nome del processo con marca temporale :) in oneliner… nessun bisogno di scripting facile e veloce …

Puoi cambiare il parametro SYN_SENT con ESTABLISHED o 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
0
0
0
2017-10-07 12:37:30 +0000

Molto bello Erik Bitemo! Stavo pensando di aggiungere una variabile per il percorso, poi mi sono reso conto che ce l'hai già, anche se non è stata definita. Quindi il codice che ho riutilizzato era:

$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*"}
     }

Stavo cercando di trovare i processi e i servizi per un'applicazione dove ho usato un 2 linee un po’ diverso.

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