PowerShell での netstat フィルタリング ロジックの include/exclude

PowerShell での netstat フィルタリング ロジックの include/exclude

現在、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_*'}

しかし、スクリプトを同時に実行しているときに、他のタイミングで表示される可能性のある他のオプションを見逃したくはありません。私が見つけたオプションの1つは、最終確認私たちのロジックにまだ含まれていない他のオプションが何があるかはわかりません。

それらの一致をすべて除外するのではなく、ロジックを反転して、次のいずれかの一致のみを含める方法はありますか?(空白)または聞いているまたは非ループバック IP? そうでない場合は、そのロジックにさらに追加できますが、専門家の意見を聞きたいだけです。

答え: すべての州を見つけましたここそして、これらすべてを含めるように更新しました。

答え1

必要がないのに車輪の再発明をしないでください。正当な質問は、Web 上でさまざまな方法で何度も尋ねられ、回答されている可能性があります。1 回の検索で絶対的な答えが見つからない場合があり、異なる文字列、文字列一致、文字列完全一致、文字列部分一致、サイト固有の一致などを使用して検索する必要があるかもしれません。

例: 'powershell フィルター netstat'

ヒット

Get-NetworkStatistics - フィルタリング付き netstat -ano

このコードは、Shay Levy の Get-NetworkStatistics 関数から借用したものです。この関数は、ローカルまたはリモート システムで netstat -ano を実行し、指定された場合はプロセス名、アドレス、ポート、プロトコル、または状態で結果をフィルターします。プロセス名は、get-process を使用して各 PID に対して取得されます。

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

あなたが望んでいることに対応する 1 つの方法は、テキスト行を、必要に応じてフィルタリングできる PoSh オブジェクトに変換することです。これは、3、4 年前に書いた古いコードです。

それは何をするのか...

  • 呼び出しの結果をnetstat$Varに保存します
  • 不要な線を消す
  • 各行をCSV行に変換します
  • CSV行のコレクションをPoShオブジェクトの配列に変換します
  • コレクションを表示する
  • .PID0番目のオブジェクトのプロパティを表示します

コード ...

$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

すべての州を見つけましたここそして、LAST を含めるように更新したところ、すべて揃いました。内容は以下の通りです。

CLOSE_WAIT、CLOSED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、LAST_ACK、LISTEN、SYN_RECEIVED、SYN_SEND、および TIME_WAIT。

関連情報