netstat con el nombre del proceso?

46

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

entonces necesito ir al administrador de tareas y agregar el PID y ver quién es. (bastante frustrante)

ingrese la descripción de la imagen aquí

Estaba preguntan si hay un comando CMD, que lo hace todo (usando find, for, powershell)

para poder obtener el nombre del proceso

Royi Namir
fuente
netstat -b como administrador, por ejemplo, netstat -abon. Y el nombre del exe está debajo
barlop

Respuestas:

56

Solución

Usa el -bparámetro:

  -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 netstat -bcomando fallará a menos que se ejecute desde un símbolo del sistema elevado.

Solución alternativa

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

tasklist | findstr /c:"PID"  


Solución alternativa

Puedes usar Tcpvcon.exeen su lugar. No se requieren derechos de administrador.

El uso de Tcpvcon es similar al de la netstatutilidad integrada de 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.
y31415
fuente
1
Eres el hombre.
Royi Namir
buena respuesta, solo comentando que creo que es divertido como el ms /? ¡la documentación incluso dice "esta opción puede llevar mucho tiempo"! y es puramente una estupidez de las ventanas que lleva mucho tiempo. El netstat de Linux muestra rápidamente su nombre ejecutable. Y también el nombre ejecutable de linux que se muestra no requiere privilegios de administrador / root
barlop
8

Creo que está buscando TCPView de SysInternals.

Leptonador
fuente
Me preguntaba si hay un comando CMD que lo hace todo
Royi Namir
Siga adelante - Hay un componente de línea de comandos de TCPView ..
Leptonator
oh ok pensé que tal vez alguien ya lo había hecho usando para buscar, etc.
Royi Namir
No debería ser demasiado difícil de hacer ... Apuesto a que robvanderwoude.com tiene algo que ver. Según la página TCPView: "La descarga de TCPView incluye Tcpvcon, una versión de línea de comandos con la misma funcionalidad".
Leptonator
Muy buen conjunto de herramientas ... si no fuera por msys y sis, estaría usando una caja nix. :)
Eddie B
2

Aquí hay un ejemplo para las ventanas que usan FORpara analizar la netstatsalida y luego DO tasklistcon /fifiltro en pid para mostrar el nombre del proceso.

El último hallazgo es eliminar los tasklistencabezados.

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

imprime registros de salida como

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

Se netstatpueden agregar campos adicionales desde agregando tokens.

marca
fuente
Pros de esta solución que incluyen: 1. usar findpara filtrar puertos (en contraste, aunque netstat -bpuede proporcionar el nombre del proceso directamente, pero pasar por su salida para buscar manualmente es doloroso y propenso a errores); 2. usando solo comandos nativos de Windows, eso es más flexible e independiente.
Yingyu TÚ el
1
Posible mejora: 1. usar findstrcon la /Ropción en lugar de findutilizar expresiones regulares para una mejor búsqueda; 2. para usar :443 *[[0-9]"como patrón para filtrar solo el puerto local . Todo el comando podría serFOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|findstr /R /C:":443 *[[0-9]"`) DO @tasklist /fi "pid eq %i" | findstr "%i"
Yingyu USTED
@DavidPostill o @mark ¿Podría aclarar "Se netstatpueden agregar campos adicionales al agregar tokens"?
Yves Schelpe
2

Si le gusta usar PS, puede bifurcar este código (nota: es súper 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)"
}

Tenga en cuenta que puede intentar en Pathlugar de ProcessNameobtener una ruta ejecutable completa; sin embargo, no funcionará con los servicios del sistema. Además, es posible que desee agregar el ProcessNameal final de la línea en lugar de reemplazar el valor PID.

Disfrútala ;)

Erik Bitemo
fuente
1

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 ESTABLECIDO o ESCUCHANDO

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
Jhon Willmaure
fuente
Usé esto con un patrón en la ip: puerto que quería observar. Gran fragmento!
Alex
0

Muy bonito Erik Bitemo! Estaba pensando en agregar una variable para la ruta y luego me di cuenta de que ya la tienes aunque no estaba definida. Entonces 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 donde utilicé un trazador de líneas 2 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
Ratan Mohapatra
fuente
Edité la pregunta de Erik para incluir su solución, por lo que si lo desea, puede eliminarla de su respuesta y concentrarse en su enfoque con GetServicey Get-Process.
flolilo