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

¿netstat con el nombre del proceso?

Usando netstat -a -o -n puedo obtener la lista de puertos y PID

luego tengo que ir al administrador de tareas y añadir el PID y ver de quien se trata. (bastante frustrante)

Me preguntaba si hay un comando CMD que lo haga todo (usando find , for , powershell)

para poder obtener el nombre del proceso

Respuestas (6)

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

Solución

Utilice el 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.

Nota El comando netstat -b fallará a menos que se ejecute desde un símbolo del sistema elevado.

Solución

Filtre la lista de procesos y encuentre el PID que le interesa:

tasklist | findstr /c:"PID"

Solución alternativa

Puede utilizar Tcpvcon.exe en su lugar. No se requieren derechos de administrador.

Tcpvcon el uso es similar al de la utilidad netstat incorporada en Windows.

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

Creo que está buscando TCPView de SysInternals.

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

Aquí hay un ejemplo para windows usando FOR para analizar la salida netstat luego DO tasklist con el filtro /fi en pid para mostrar el nombre del proceso.

El último hallazgo es eliminar las cabeceras tasklist.

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

imprime la salida de registros como

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

Se pueden añadir campos adicionales de netstat añadiendo tokens.

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

Si eres aficionado a usar PS, puedes bifurcar este código (nota: es superbá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)"
}

Ten en cuenta que puedes probar con Path en lugar de ProcessName para obtener una ruta de ejecución completa - aunque no funcionará con los servicios del sistema. Además, es posible que quieras añadir el ProcessName al final de la línea en lugar de reemplazar el valor del PID.

Que lo disfrutes ;)

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

Intenta usar esto…

Nombre del proceso con sello de tiempo :) en oneliner… no necesita scripting rápido y fácil …

Puede cambiar el parámetro SYN_SENT por 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

¡Muy bien Erik Bitemo! Estaba pensando en añadir una variable para la ruta de acceso y luego me di cuenta de que ya la tienes aunque no estaba definida. Así que el código que reutilicé fue:

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

Estaba tratando de encontrar los procesos y servicios para una aplicación en la que utilicé un 2 liner algo 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