it-swarm.com.de

netstat mit Prozessname?

Mit netstat -a -o -n kann ich die Liste der Ports und der PID erhalten

dann muss ich zum Task-Manager gehen und die PID hinzufügen und sehen, wer es ist. (ziemlich frustrierend)

enter image description here

Ich habe mich gefragt, ob es einen CMD-Befehl gibt, der alles macht (mit find, for, powershell).

damit ich den Prozessnamen bekommen konnte

44
Royi Namir

Lösung

Verwenden Sie den Parameter -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.

Hinweis Der Befehl netstat -b schlägt fehl, sofern er nicht über eine Eingabeaufforderung mit erhöhten Rechten ausgeführt wird.

Workaround

Filtern Sie die Prozessliste und finden Sie die PID, die Sie interessiert:

tasklist | findstr /c:"PID"  

Alternative Lösung

Sie können stattdessen Tcpvcon.exe verwenden. Keine Administratorrechte erforderlich.

Tcpvcon Die Verwendung ähnelt der des integrierten Windows-Dienstprogramms 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.
53
and31415

Ich denke, Sie suchen nach TCPView von SysInternals.

8
Leptonator

Wenn Sie gerne PS verwenden, können Sie diesen Code abspalten (Hinweis: Es ist super-einfach)

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

Beachten Sie, dass Sie Path anstelle von ProcessName versuchen können, um einen vollständigen ausführbaren Pfad zu erhalten - dies funktioniert jedoch nicht mit Systemdiensten. Möglicherweise möchten Sie auch die ProcessName an das Ende der Zeile anhängen, anstatt den PID-Wert zu ersetzen.

Geniesse es ;)

2
Erik Bitemo

Hier ist ein Beispiel für Fenster, die FOR verwenden, um netstat auszugeben, dann DOtasklist mit /fi Filter auf pid, um den Prozessnamen anzuzeigen.

Der letzte Fund besteht darin, tasklist Header zu entfernen.

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

druckt Datensätze wie ausgegeben

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

Zusätzliche Felder aus netstat können durch Hinzufügen von Tokens hinzugefügt werden.

2
mark

Sehr schön Erik Bitemo! Ich habe überlegt, eine Variable für den Pfad hinzuzufügen, und dann habe ich festgestellt, dass Sie diese Variable bereits haben, obwohl sie nicht definiert wurde. Der Code, den ich wiederverwendete, war also:

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

Ich habe versucht, die Prozesse und Dienste für eine Anwendung zu finden, bei der ich einen etwas anderen 2-Liner verwendet habe.

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
0
Ratan Mohapatra

Versuchen Sie, dies zu verwenden ...

Prozessname mit Zeitstempel :) in oneliner ... kein Scripting nötig, schnell und einfach ...

Sie können den Parameter SYN_SENT durch ESTABLISHED oder LISTENING ändern

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
Jhon Willmaure