lcer00
Goto Top

Netstat automatisiert auswerten?

Hallo,
ich stehe vielleicht ein bisschen auf dem Schlauch ...

ich benötige eine Liste der Prozesse eines Servers, die an Ports gebunden sind. Ziel ist eine Erfassung der zu berücksichtigen Firewallregeln und das entdecken unnützer offener Ports.

das habe ich jetzt an zwei Server wie folgt erledigt:

netstat -anob > c:\tmp\netstat.txt
die Liste habe ich dann manuell umformatiert, bis sie in eine Excel-Tabelle passte
dort habe ich eine Pivot-Tabelle erzeugt und habe eine nette Liste aller von netstat ausgegeben Prozesse.

Das ist etwas nervig. Außerdem werden nur die Prozesse erfasst, die gerade laufen. über einen längeren Zeitraum wird das ein wenig aufwändig.

Gibt es da ein Tool das so eine Liste schneller und effizienter erzeugt? TCPView kann ich zwar über einen längeren Zeitraum laufen lassen, die erzeugte Liste wird aber auch sehr lang.

Grüße

lcer

Content-ID: 351543

Url: https://administrator.de/forum/netstat-automatisiert-auswerten-351543.html

Ausgedruckt am: 11.04.2025 um 06:04 Uhr

134464
134464 12.10.2017 aktualisiert um 10:38:28 Uhr
Goto Top
Gibt's schon im NET-Framework als Funktion und damit als Objekt handlebar:

Powershell
[System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpListeners() 

Siehe auch Powershell Prozess überwachen und evtl. neu starten
lcer00
lcer00 12.10.2017 um 11:31:47 Uhr
Goto Top
GetActiveTcpListeners() gibt ja nur die Ports Klasse IPEndPoint zurück. Den Prozess dazu muss man dann für jeden einzeln suchen.
Da liefert netstat mit Parameter -b die Prozesse, die man dann gut aus der Datei rausfiltern kann.

Ich hatte gehofft es gibt so was wie GetActive_IP_Listener_Processes() -> Array mit Prozessen face-smile

lcer
colinardo
Lösung colinardo 12.10.2017 aktualisiert um 12:43:20 Uhr
Goto Top
Servus Icer,
kein Problem.

Für modernere OS (ab Windows Server 2012 R2 und Windows 8.1) geht dies mit Powershell mit den dafür vorgesehenen CMDLets so:
# TCP Connections auflisten
Get-NetTCPConnection | ft LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,@{n='ProcessName';e={(Get-Process -id $_.OwningProcess).Name}}  
# UDP Endpoints auflisten
Get-NetUDPEndpoint  | ft LocalAddress,LocalPort,OwningProcess,@{n='ProcessName';e={(Get-Process -id $_.OwningProcess).Name}}  
oder für ältere OS mit Auswertung von Netstat:
function ConvertFrom-CP850([string[]]$string){
    $cp850 = [System.Text.Encoding]::GetEncoding(850)
    $string | %{$cp850.GetString([System.Console]::OutputEncoding.GetBytes($_))}
}

ConvertFrom-CP850 (netstat -ano) | ?{$_ -match '^\s*(TCP|UDP)'} | %{  
    $line = $_ -split '\s+'  
    [int]$pid = @{$true=$line[4];$false=$line[5]}[($line[4] -match '^\d')]  
    $procName = (Get-Process -id $pid).Name
    [pscustomobject] @{'Protocol' = $line[1];'Source' = $line[2];'Destination' = $line[3];'Status' = @{$true="";$false=$line[4]}[($line[4] -match '^\d')] ;'PID' = $pid; "Process" = $procName}  
} | ft
Alles inkl. Umwandlung der PID in Prozessname. Da die Daten Objekte sind lassen sie sich nach Bedarf filtern auswerten oder wegschreiben, wie man es will. Du hast die Wahl.

Viel Spaß
Grüße Uwe
lcer00
lcer00 12.10.2017 aktualisiert um 12:59:12 Uhr
Goto Top
Super, so etwas hatte ich gesucht. Mit:
Get-NetTCPConnection | Group-Object OwningProcess -noElement | ft Name,@{n='ProcessName';e={(Get-Process -id $_.Name).Name}}  
Hab ich dann meine Liste. ( ... und UDP natürlich entsprechend)

Danke
134464
134464 12.10.2017 um 13:04:42 Uhr
Goto Top
Na dann auf gelöst setzen.