Derzeit verwenden wir eine Logik in PowerShell, um netstat -ano
alle 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
netstat
Aufrufs 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
.PID
Eigenschaft 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.