これは、C# & .Net Framework 4.0 で作成しました
はじめに
イベントログを監視して、通知をおこなうツールです。
まぁ、あまり使いどころはないかもしれないですけど・・・
動作環境
Microsoft .NET Framework4.0
NT サービスとして起動し、イベントログにアクセスして通知する権限が必要です
インストール方法と使用方法
まず、ランタイム(.NET Framework4.0)をセットアップします。
sEventLogMonitor.lzh をダウンロードします。
ダウンロードしたファイルを解凍しします。
(LHAは、吉崎栄泰氏が、著作権を所有)
「sEventLogMonitor.exe -install」で NT サービスにインストール後、NT サービスとしてスタートしてください。
特定のイベントを受信すると、通知処理が行われるかと思いますよ。
「sEventLogMonitor.exe -uninstall」で NT サービスからアンインストールできます。
レジストリ「HKLM\Software\sEventLogMonitor」下に設定を記述してください。
レジストリの設定値は「sEventLogMonitor.reg」を参考にしてください。
当然ですが、悪用厳禁です。
レジストリの説明(共通)
HKLM\Software\sEventLogMonitor\VerboseMode (REG_SZ)
これが空文字以外で存在すれば、バーバスモードとなり、検知しない時はイベントログに記録するようにした(イベントのソース名を調べられるはず) (ver1.1.0.0以降)
HKLM\Software\sEventLogMonitor\TargetEventLog (REG_SZ)
イベントログの対象をカンマ区切りで指定する。指定しない場合は「Application」(ver1.1.0.0以降)
HKLM\Software\sEventLogMonitor\AlertType (REG_SZ)
通知方法を指定します。既定はカンマ区切りの「smtp」「ipmsg」。Plugin.AlertToXML.dllがロードしている場合は「xmlfile」
HKLM\Software\sEventLogMonitor\FilterType (REG_SZ)
イベントログの取捨選択の方法を指定します。既定は「SimpleFilter」
HKLM\Software\sEventLogMonitor\From (REG_SZ)
監視の開始時間を指定します。例えば「9:00」
HKLM\Software\sEventLogMonitor\To (REG_SZ)
監視の終了時間を指定します。例えば「17:30」
HKLM\Software\sEventLogMonitor\plugin (REG_SZ)
通知方法、取捨選択方法についてのプラグインがあれば、そのパスを指定します。
レジストリの説明(既定の取捨選択の方法「SimpleFilter」)
HKLM\Software\sEventLogMonitor\SimpleFilter 以下
イベントログの取捨選択の方法「SimpleFilter」の設定。
HKLM\Software\sEventLogMonitor\SimpleFilter\値 (REG_DWORD)
名前にイベントログの「ソース名」、値にイベントログの「イベントID」
イベントのソース名(ver1.1.0.0 以降)
イベントビューアに表示されるソース名と、内部的に使われているソース名が一致しない場合がある。
例えば、「EventLog」は、内部的には「Microsoft-Windows-Eventlog」だったりする。
図1
イベントビューアには「EventLog」と表示されるが・・・
図2
内部的には「Microsoft-Windows-Eventlog」のようだ
よって、レジストリ「HKLM\Software\sEventLogMonitor\VerboseMode」を使う事で、図2のようなイベントを出力するので、イベントのソース名を調べやすくなるんではないかと思う。
ただし、レジストリ「HKLM\Software\sEventLogMonitor\VerboseMode」は実運用には適していないので、あくまで内部的なソース名を調べる事にだけ使う事。
(イベントログの書き込みに対して、イベントログを書き込むので、状況によっては無限ループになりうる)
レジストリの説明(既定の通知方法1「IPMsg」)
IPMessenger
へ通知します。
HKLM\Software\sEventLogMonitor\IPMsg 以下
IPMessenger で通知します。その設定。
HKLM\Software\sEventLogMonitor\IPMsg\pcname (REG_SZ)
IPMessenger のPCName
HKLM\Software\sEventLogMonitor\IPMsg\name (REG_SZ)
IPMessenger のname
HKLM\Software\sEventLogMonitor\IPMsg\SendCount (REG_DWORD)
IPMessenger は UDP なので、同一メッセージの再送回数
HKLM\Software\sEventLogMonitor\IPMsg\distList 以下
IPMessenger の送信相手
HKLM\Software\sEventLogMonitor\IPMsg\distList\値 (REG_DWORD)
IPMessenger の送信相手、名前に IPアドレス。値にポート番号
レジストリの説明(既定の通知方法2「SMTP」)
SMTP プロトコルを使って電子メールで通知します。
HKLM\Software\sEventLogMonitor\smtp 以下
SMTP で通知します。その設定。
HKLM\Software\sEventLogMonitor\smtp\mailFrom (REG_SZ)
SMTP の MAIL FROM に与える値
HKLM\Software\sEventLogMonitor\smtp\mailSubject (REG_SZ)
SMTP の題名
HKLM\Software\sEventLogMonitor\smtp\smtpserver (REG_SZ)
SMTP のサーバアドレス
HKLM\Software\sEventLogMonitor\smtp\smtpport (REG_DWORD)
SMTP のサーバのポート番号
HKLM\Software\sEventLogMonitor\smtp\encoding (REG_SZ)
SMTP のメールの文字コード
HKLM\Software\sEventLogMonitor\smtp\smtpSSL (REG_SZ)
SMTP で SSL 使うかどうか
HKLM\Software\sEventLogMonitor\smtp\smtpNoCheckCert (REG_SZ)
SMTPs でサーバ証明書を検証するかどうか
HKLM\Software\sEventLogMonitor\smtp\smtpClientCertFile (REG_SZ)
SMTPs で提示するクライアント証明書
HKLM\Software\sEventLogMonitor\smtp\smtpClientCertPassword (REG_SZ)
SMTPs で提示するクライアント証明書のパスワード
HKLM\Software\sEventLogMonitor\smtp\smtpUsername (REG_SZ)
SMTP 認証のユーザ名
HKLM\Software\sEventLogMonitor\smtp\smtpPassword (REG_SZ)
SMTP 認証のパスワード(平文のまま)
HKLM\Software\sEventLogMonitor\smtp\distList 以下
SMTP の送信相手
HKLM\Software\sEventLogMonitor\smtp\distList\値 (REG_SZ)
SMTP の送信相手、名前は適当。値にメールアドレス
ただし、
System.Net.Mail.SmtpClient
を用いているため、SMTP認証には制限があります。
プラグイン
通知方法、ログの取捨選択の方法に関しては、プラグインとして拡張させる事が可能です。
sEventLogMonitor.exe を参照設定して、インターフェイスを継承したクラス(DLL)を作成し、レジストリ「HKLM\Software\sEventLogMonitor\plugin」で指示されるディレクトリに配置すれば、プラグインを読み込みます。
.NET Framework のプラグイン読み込みの制約から、DLL の ZoneID がついていると読み込まれないかと思います。
通知方法に関しては、インターフェイス「IAlertMethodImpl」または基底クラス「AlertMethodBase」を継承したクラスを作成すればよいです。
取捨選択の方法に関しては、インターフェイス「IEventFilterImpl」を継承したクラスを作成すればよいです。
プラグイン(通知方法)
インターフェイス「IAlertMethodImpl」を実装する上で必要のメソッドは以下の二つです。
Boolean DoUseThisObject(String str)
レジストリ「HKLM\Software\sEventLogMonitor\AlertType」のカンマ区切りの値が第一引数として渡されるので、自分のものの場合は「True」を返せば、sEventLogMonitor.exe に読み込まれます。
「False」を返せば、メモリから解放されます。
void Message(System.Diagnostics.EntryWrittenEventArgs e)
取捨選択で選択されたイベントが発生した場合、呼びだされますので、通知処理をこの中に実装してください。
プラグイン(取捨選択の方法)
インターフェイス「IEventFilterImpl」を実装する上で必要のメソッドは以下の二つです。
Boolean DoUseThisObject(String str)
レジストリ「HKLM\Software\sEventLogMonitor\FilterType」のカンマ区切りの値が第一引数として渡されるので、自分のものの場合は「True」を返せば、sEventLogMonitor.exe に読み込まれます。
「False」を返せば、メモリから解放されます。
Boolean Where(EntryWrittenEventArgs e)
イベントログへ書き込みがあれば、呼び出されますので、通知対象かどうか判断する処理をこの中に実装してください。
Plugin.AlertToXML.dll
Plugin.AlertToXML.dll は、サンプルのプラグインです
通知内容を指定の XML ファイルに書き出します。
ファイル内容を「<?xml version='1.0'><alert>....</alert>」としてあげれば立派な XMLです。
レジストリ「HKLM\Software\sEventLogMonitor\AlertType」には「xmlfile」と指定する事で有効化します。
HKLM\Software\sEventLogMonitor\xmlfile 以下
XMLファイルに書き出します。その設定。
HKLM\Software\sEventLogMonitor\xmlfile\xmlFilePath (REG_SZ)
XML ファイルの保存先
免責など
当然ですが、悪用厳禁です。
プログラムの改変については、各自の責任で行う分については、自由に行って結構です。(参考になりましたメールをくれると、うれしい...(*^_^*))
修正BSDライセンスで配布します。
Version1.2.0.0
DownLoad
(sEventLogMonitor.lzh as 59,265byte) (
sEventLogMonitor.lzh.base64
)
履歴
2017/11/02 : ver1.0.0.0 最初のバージョン
2017/12/?? : ver1.1.0.0 設定可能なオプションとしてレジストリ「TargetEventLog」を用意して、「Application」イベントログ以外も対象にできるようにした。レジストリ「VerboseMode」を用意して、イベントのソース名を調べられるようにした。
2018/06/14 : ver1.2.0.0 SMTPs でのサーバ証明書検証チェック有無、クライアント証明書の対応。
mail to active@window.goukaku.com