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

netstat mit Prozessname?

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

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

Ich frage mich, ob es einen CMD-Befehl gibt, der das alles macht (mit find , for , powershell)

, so dass ich den Prozessnamen bekommen könnte

Antworten (6)

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

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, wenn er nicht über eine erweiterte Eingabeaufforderung ausgeführt wird.

Umgehung

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 Admin-Rechte erforderlich.

Tcpvcon Die Verwendung ist ähnlich wie die des eingebauten 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.
8
8
8
2014-01-26 16:12:23 +0000

Ich denke, Sie suchen nach TCPView von SysInternals.

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

Hier ist ein Beispiel für Windows, das FOR verwendet, um die netstat-Ausgabe zu parsen, dann DO tasklist mit /fi-Filter auf pid, um den Prozessnamen anzuzeigen.

Die letzte Suche 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"

gibt Datensätze aus wie

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

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

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

Wenn Sie gerne PS verwenden, können Sie diesen Code aufspalten (Hinweis: er ist superbasisch)

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

Hinweis: Sie können Path anstelle von ProcessName versuchen, um einen vollständigen ausführbaren Pfad zu erhalten - es wird jedoch nicht mit Systemdiensten funktionieren. Außerdem können Sie das ProcessName an das Ende der Zeile anhängen, anstatt den PID-Wert zu ersetzen.

Viel Spaß damit ;)

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

Versuchen Sie, dies zu verwenden…

Prozessname mit Zeitstempel :) im Oneliner… kein Skripting 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
0
0
2017-10-07 12:37:30 +0000

Sehr schön Erik Bitemo! Ich dachte daran, eine Variable für den Pfad hinzuzufügen, dann wurde mir klar, dass Sie das bereits haben, obwohl es nicht definiert war. Also war der Code, den ich wiederverwendet habe:

$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