« 宅内LANをいよいよv6するまでの流れ | トップページ

2017/08/29

Windows 10 の Powershell で Syslog 受信するスクリプト

ネットワーク機器の吐き出すSyslogをファイルに保存したくは無いけど、リアルタイムに流れてくるものを拾って眺めておきたい。というシチュエーションが私にはあるので、適当なプログラムが無いかと探していたら、Powershell で実現する方法が載っていたので紹介します。

見つけたのはこちらのWebページです。こちらに掲載されているスクリプトをベースにアレンジしました。
WindowsでPowershellだけでSyslogを受信してみる。 | 技術的な何か。

また、Syslog のセレクターの計算処理についてはこちらが詳しい。

実行してSyslogを受信するとこのように表示されます。
15e2cfa6883ad1a9340a3c14

以下、スクリプト(インデントが反映されてないですがご容赦を)

SyslogMon.ps1


$Udp = New-Object Net.Sockets.UdpClient -ArgumentList 514
$Sender = $null

Add-Type -TypeDefinition @"
public enum Syslog_Facility
{
kern,
user,
mail,
system,
security,
syslog,
lpr,
news,
uucp,
clock,
authpriv,
ftp,
ntp,
logaudit,
logalert,
cron,
local0,
local1,
local2,
local3,
local4,
local5,
local6,
local7,
}
"@

Add-Type -TypeDefinition @"
public enum Syslog_Severity
{
Emergency,
Alert,
Critical,
Error,
Warning,
Notice,
Info,
Debug
}
"@

Write-Host "Starting Syslog Monitor"

while($true) `
{
if($Udp.Available) `
{
$Buffer = $Udp.Receive([ref]$Sender)
$RemoteHostIpAddress = $Sender.Address.ToString()
$MessageString = [Text.Encoding]::UTF8.GetString($Buffer)

## Syslog セレクター情報の抽出
$Priority = [Int]($MessageString -Replace "<|>.*")
[int]$FacilityInt = [Math]::truncate([decimal]($Priority / 8))
$Facility = [Enum]::ToObject([Syslog_Facility], $FacilityInt)
[int]$SeverityInt = $Priority - ($FacilityInt * 8 )
$Severity = [Enum]::ToObject([Syslog_Severity], $SeverityInt)

## Syslog セレクターを除去
$MessageString = $MessageString -Replace "^<[0-9]+>",""

## Syslog の DateTime と 内容を分割
$MessageStringArray = $MessageString -Split " "
$MessageStringDate = $MessageStringArray[0] + " " + $MessageStringArray[1] + " " + $MessageStringArray[2]
$MessageStringBody = $MessageString -Replace $MessageStringDate,""

## 出力フォーマット
# $MessageOut = "$MessageStringDate $RemoteHostIpAddress <$Facility.$Severity> $MessageStringBody"
$MessageOut = "$RemoteHostIpAddress <$Facility.$Severity> $MessageString"

## ディスプレイに表示させるだけにするか、ファイルに保存するか。両方でも良い。
Write-Host $MessageOut
#$MessageOut >> c:\temp\syslog.log
}
[Threading.Thread]::Sleep(500)
}


« 宅内LANをいよいよv6するまでの流れ | トップページ

パソコン・インターネット」カテゴリの記事

ネットワーク」カテゴリの記事

コメント

新しいブログに移転とスクリプトのブラッシュアップしました。

https://blog.kurobee.dev/2019/03/windows-10-powershell-syslog.html#more

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Windows 10 の Powershell で Syslog 受信するスクリプト:

« 宅内LANをいよいよv6するまでの流れ | トップページ

フォト

ついったぁ


無料ブログはココログ
2019年9月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

最近のトラックバック