Einschließen/Ausschließen der Netstat-Filterlogik in PowerShell

Einschließen/Ausschließen der Netstat-Filterlogik in PowerShell

Derzeit verwenden wir eine Logik in PowerShell, um netstat -anoalle TCP- und UDP-Ergebnisse abzurufen und die Ergebnisse herauszufiltern, die wir nicht sehen müssen, und sie dann in eine CSV-Datei zu exportieren. Wir möchten, dass die Ergebnisse nur dieHÖRENUnd(leer)UndNicht-Loopback-IPs.

Ein Beispiel wäre netstat -ano | Where-Object{$_ -notlike '*127.?.?.?*' -and $_ -notmatch '\[::1]' -and $_ -notmatch 'TIME_WAIT' -and $_ -notmatch 'CLOSE*' -and $_ -notmatch 'ESTABLISHED' -and $_ -notmatch 'SYN_*' -and $_ -notmatch 'FIN_*'}.

Wir möchten jedoch die anderen Optionen nicht verpassen, die zu anderen Zeiten verfügbar sein können, wenn wir zufällig gleichzeitig unser Skript ausführen. Eine, die ich gerade gefunden habe, istLAST_ACKund ich weiß nicht, welche anderen Optionen es gibt, die unsere Logik nicht bereits berücksichtigt.

Gibt es eine Möglichkeit, diese Logik umzudrehen, anstatt alle diese Übereinstimmungen herauszufiltern? Können wir dann nur Übereinstimmungen einschließen, die entweder(leer)oderHÖRENoderNicht-Loopback-IPs? Wenn nicht, kann ich dieser Logik noch mehr hinzufügen, wollte aber einfach die Meinung einiger Experten hören.

ANTWORT: Ich habe alle Staaten gefundenHierund habe es gerade aktualisiert, um all dies einzuschließen.

Antwort1

Erfinden Sie das Rad nicht neu, wenn es nicht sein muss. Jede berechtigte Frage wurde möglicherweise bereits mehrfach und auf viele verschiedene Arten im gesamten Web gestellt und beantwortet. Möglicherweise finden Sie bei einer Suche keine absolute Antwort und müssen mit einer oder mehreren anderen Zeichenfolgen, Zeichenfolgenübereinstimmungen, exakten Zeichenfolgenübereinstimmungen, teilweisen Zeichenfolgenübereinstimmungen, sitespezifischen Übereinstimmungen usw. suchen.

Beispiel: „PowerShell-Filter Netstat“

Treffer

Get-NetworkStatistics - netstat -ano mit Filterung

Dieser Code ist von Shay Levys Funktion Get-NetworkStatistics übernommen. Diese Funktion führt netstat -ano auf einem lokalen oder Remote-System aus und filtert die Ergebnisse nach Prozessname, Adresse, Port, Protokoll oder Status, falls angegeben. Prozessnamen werden für jede PID mit get-process abgerufen.

https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71

Herunterladen:https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71/file/68504/10/Get-NetworkStatistics.ps1

Verwenden Sie es so, wie es ist, oder ändern Sie es nach Bedarf.

Antwort2

hier ist eine Möglichkeit, mit dem umzugehen, was Sie meiner Meinung nach wollen: Konvertieren Sie die Textzeilen in PoSh-Objekte, die Sie nach Belieben filtern können. Dies ist alter Code, den ich vor 3 oder 4 Jahren geschrieben habe.

Was es macht ...

  • speichert das Ergebnis eines netstatAufrufs in einer $Var
  • reinigt die unerwünschten Linien
  • konvertiert jede Zeile in eine CSV-Zeile
  • konvertiert die Sammlung von CSV-Zeilen in ein Array von PoSh-Objekten
  • zeigt die Sammlung
  • zeigt die .PIDEigenschaft des 0. Objekts an

der Code ...

$Raw_Result = netstat -a -o -n

# get rid of the unwanted 1st three lines
$Raw_Result = $Raw_Result | Select-Object -Skip 3
# remove the `---` line
$Raw_Result = $Raw_Result | Select-String -Pattern '[^---]'

$Cleaned_Result = foreach ($Line in $Raw_Result)
    {
    $Line = $Line.ToString().Trim()
    if ($Line[53] -eq ' ')
        {
        $Line = $Line.Insert(53, '-NA-')
        }
    $Line = $Line -replace ' {2,}', ','

    $Line
    }


$Final_Result = $Cleaned_Result | ConvertFrom-Csv


#$Raw_Result
#$Cleaned_Result
$Final_Result
Write-Output ''
$Final_Result[0].PID

abgeschnittene Ausgabe ...

Proto           : UDP
Local Address   : [::]:55356
Foreign Address : *:*
State           : -NA-
PID             : 3352

[*...snip...*] 

Proto           : UDP
Local Address   : [fe80::d129:4be7:98da:e357%14]:53382
Foreign Address : *:*
State           : -NA-
PID             : 3908


1308

Der Nutzen der ganzen Arbeit besteht darin, dass Sie nun über eine leicht zu sortierende oder filternde Sammlung relativ standardmäßiger Objekte verfügen. [Grinsen]

Antwort3

Ich habe alle Staaten gefundenHierund habe es gerade aktualisiert, um LAST einzuschließen, und jetzt sind sie alle da. Sie lauten wie folgt:

CLOSE_WAIT, GESCHLOSSEN, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, SYN_RECEIVED, SYN_SEND und TIME_WAIT.

verwandte Informationen