Einleitung

Die allermeisten kennen den Windows Task Manager und noch wieder andere kennen das „netstat“- Kommando aus DOS- Zeiten. Beides in Kombination kann einem Admin helfen, Kommunikationsbeziehungen aus Windows heraus zu ermitteln. Sprich, mit wem und über welche aktiv laufenden Prozesse kommuniziert mein Windows im Moment?

Jedoch kann diese Kombination aus Task Manager und der Eingabeaufforderung etwas mühselig bzw. langwierig werden. Selbst dann, hat man in der Regel noch nicht alle Informationen auf einen Blick beisammen. Die einfachste Frage lautet: „Welches Programm / welcher Prozess kommuniziert mit welcher Zieladresse, über welchen Port?“

Mit „netstat -ano“ in der Eingabeaufforderung erhält man zwar die Process ID (PID) der einzelnen Verbindungen, jedoch nicht den aktuell dahinterstehenden Namen des Prozesses. Sprich, mit der ermittelten PID kann man sich im Task Manager unter dem Reiter „Details“ auf die Suche begeben.

netstat:

(Die Ausgabe von netstat ist optisch auf das wesentlichste begrenzt)

Task Manager:

Ist auf diesem manuellen Weg, die PID aus netstat dem Prozessnamen im Task Manager zugeordnet, steht einem jedoch nur eine einzelne Auswertung zur Verfügung!

Es geht mit PowerShell jedoch bedeutend einfacher und schneller für ALLE aktiven Prozesse, in einer gemeinsamen Auswertung. Die PID wird quasi sofort durch den realen Prozessnamen in der Auswertung ersetzt.

Skriptbeispiel – Allgemeine Auswertung

Das Skript basiert hierzu auf dem Get-NetTCPConnection und kombiniert den ermittelten Wert des OwningProcess mit dem Get-Process- Befehl, um eine entsprechende Ausgabe mit dem eigentlichen Prozessnamen zu ermitteln.

$prop = @( `
    "local*",`
    "remote*",`
    "state",`
    @{Name="Process";`
    Expression=`
    {
        (Get-Process -Id $_.OwningProcess).ProcessName}
    })

Get-NetTCPConnection | 
    Select-Object -Property $prop | 
    Format-Table -AutoSize

Ergebnis

Als Ergebnis wird eine generelle Kommunikationsübersicht ausgegeben, die Quelle und Ziel mit den entsprechenden Informationen in Beziehungen setzen (LocalAddress, LocalPort, RemoteAddress, RemotePort, State, Process).

Skriptbeispiel – Gefilterte Auswertung

Natürlich lässt sich die zu erstellende Ausgabe noch beliebig einschränken bzw. filtern. Damit z.B. nur die Kommunikationsbeziehungen vom aktuell im Hintergrund laufenden OneDrive ausgegeben werden.

$prop = @( `
    "local*",`
    "remote*",`
    "state",`
    @{Name="Process";`
    Expression=`
    {
        (Get-Process -Id $_.OwningProcess).ProcessName}
    })

$Process = '*OneDrive*'
$State   = 'Established'

Get-NetTCPConnection | 
    Select-Object -Property $prop | 
    Where-Object {$_.Process -like $Process -and $_.State -eq $State} |
    Format-Table -AutoSize

Fazit

Mit dieser einfachen Identifizierung einer Prozess ID (PID) zum Prozessnamen, können entweder die Kommunikationsbeziehungen einzelner Prozesse untersucht werden, oder in anderen möglichen Szenarien zum Einsatz kommen. Probiert es am besten selbst einmal aus!


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Time limit is exhausted. Please reload CAPTCHA.