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-Key: 351543

Url: https://administrator.de/contentid/351543

Printed on: April 19, 2024 at 04:04 o'clock

Mitglied: 134464
134464 Oct 12, 2017 updated at 08:38:28 (UTC)
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
Member: lcer00
lcer00 Oct 12, 2017 at 09:31:47 (UTC)
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
Member: colinardo
Solution colinardo Oct 12, 2017 updated at 10:43:20 (UTC)
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
Member: lcer00
lcer00 Oct 12, 2017 updated at 10:59:12 (UTC)
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
Mitglied: 134464
134464 Oct 12, 2017 at 11:04:42 (UTC)
Goto Top
Na dann auf gelöst setzen.