Логика фильтрации netstat включает/исключает в PowerShell

Логика фильтрации netstat включает/исключает в PowerShell

В настоящее время мы используем некоторую логику в PowerShell, чтобы получить netstat -anoвсе результаты TCP и UDP и отфильтровать результаты, которые нам не нужны, а затем экспортировать их в CSV. Мы хотим, чтобы результаты включали толькоСЛУШАНИЕи(пустой)иIP-адреса без обратной связи.

Одним из примеров может быть 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_*'}.

Однако мы не хотим упустить другие варианты, которые могут появиться в другое время, если мы случайно запустим наш скрипт в то же время. Один из них, который я только что нашел, этоLAST_ACKи я не знаю, какие еще варианты есть, которые наша логика уже не включает.

Есть ли способ перевернуть эту логику, вместо того чтобы отфильтровывать все эти совпадения, можем ли мы включить только те совпадения, которые либо(пустой)илиСЛУШАНИЕилиIP-адреса без обратной связи? Если нет, я могу добавить больше к этой логике, но просто хотел услышать мысли некоторых экспертов.

ОТВЕТ: Я нашел все штатыздесьи просто обновил его, включив все это.

решение1

Не изобретайте велосипед, когда в этом нет необходимости. Любой законный вопрос потенциально уже был задан и на него ответили, много раз, разными способами по всему Интернету. Вы можете не найти абсолютный ответ за один поиск, и вам может потребоваться выполнить поиск, используя другую строку(и), совпадение строки, точное совпадение строки, частичное совпадение строки, совпадение с конкретным сайтом и т. д.

Пример: «фильтр powershell netstat»

Хиты)

Get-NetworkStatistics - netstat -ano с фильтрацией

Этот код заимствован из функции Get-NetworkStatistics Шэя Леви. Эта функция запускает netstat -ano на локальной или удаленной системе и фильтрует результаты по имени процесса, адресу, порту, протоколу или состоянию, если указано. Имена процессов извлекаются для каждого PID с помощью get-process.

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

Скачать:https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71/file/68504/10/Get-NetworkStatistics.ps1

Используйте «как есть» или измените по мере необходимости.

решение2

Вот один из способов справиться с тем, что, как я думаю, вам нужно... преобразовать строки текста в объекты PoSh, которые вы можете фильтровать по своему усмотрению. Это старый код, который я написал 3 или 4 года назад.

что оно делает ...

  • сохраняет результат вызова netstatв $Var
  • очищает нежелательные линии
  • преобразует каждую строку в строку CSV
  • преобразует коллекцию строк CSV в массив объектов PoSh
  • отображает коллекцию
  • отображает .PIDсвойство 0-го объекта

код ...

$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

усеченный вывод ...

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

Преимущество всей этой работы в том, что теперь у вас есть коллекция довольно стандартных объектов, которую легко сортировать и фильтровать. [ухмылка]

решение3

Я нашел все штатыздесьи просто обновил его, включив ПОСЛЕДНИЙ и теперь они все там. Они следующие ниже:

CLOSE_WAIT, CLOSED, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, SYN_RECEIVED, SYN_SEND и TIME_WAIT.

Связанный контент