|
1.目次
2.目的
3.参考書
4.Windows での SNMP Agent の起動
5.SNMPについて
6.Snmpクラス概要
7.SNMP_Test_Tool |
|
Platform SDK から、SNMPで情報を取得する方法です。
SNMP とは、Simple Network Management Protocol
の略で、ルータなどのネットワークデバイスの状態を取得するプロトコルです。
最初は、プラットフォームSDKの動作を確認するぐらいでやめるつもりだったのだけれど、いろいろうまくいかないで、次々に手を入れることになってしまいました
。とても厄介です。
と、四苦八苦していたところ、河端さんからの情報で、WMI から SNMP
をアクセスできるそうです。試してませんが、マネージドコードで処理できるので、WMI→SNMP
のほうがずっと楽にできると思います。プラットフォームSDK経由の SNMP ではなくて、WMI 経由のSNMP にしたほうがいいと思います。
ともあれ、Platform SDK のSNMPアクセスや、非同期コールなどせっかく調べたので、メモっておきます。
リスト画面
Get(WALK)したところ
Trap を受信したところ
|
|
(1) MSDN Simple
Network Management Protocol
(2) MSDN
SNMP Functions
(3) 1.3.6.1.2.1
- SNMP MIB-2
(4) NET-SNMP
導入メモ
(5) Auto*Manage
|
|
テストのために、自分自身のPCへSNMPでのアクセスを行います。
そこで、Windows の SNMP Agent を起動しておく必要があります。
次のように、Windows の SNMP Service を起動しておきます。
次に、SNMP Service のプロパティで、コミュニティ名、トラップ送信先をアプリケーションを動かすホスト名を指定します。
次に、SNMP Service のセキュリティで、受け付けるコミュニティ名と、権利を指定します。
ここでは、一般的な public と private という名前にしておきますが、これはセキュリティホールになりますから、気をつけてください。
何をいっているのかわからない人は、危険なのでまずSNMPを勉強してからにしましょう。
|
|
ここでは、詳しいことは解説しませんが、初めての人は
SNMPで検索すると、いろいろなサイトがあるので、そこで概略を理解するといいでしょう。
また、OID, Asn.1 についてわからないと、コードが何をしているのかわからないので、Object Identifier
(OID)、Abstract Syntax Notation One
(ASN.1) あたりも勉強しないとだめです。ネット検索では、ほとんど英語の文献しかありません。
プラットフォームSDK には2種類あります。
特徴は次のとおりです。
Project | 機能 |
SnmpMgr("Mgmtapi.DLL") | 簡易 SNMP マネージャ用の インターフェース
トラップのコールバックに対応していない。 |
WinSNMP("WSNMP32.DLL") | SnmpMgr よりは、さらに下位のインターフェース
トラップのコールバックにも対応している。 |
ここでは、Snmp のデータのGET/SET/WALK を SnmpMgr インターフェースで行いました。
しかし、SnmpMgr インターフェースでは、トラップのコールバックに対応していないので、トラップのコールバック処理のためだけに WinSNMP
を使用しています。
でも、と〜〜〜〜〜〜〜〜〜〜〜っても使いにくいです。
WMI で SNMP の処理ができるなら、そちらがお勧めです。
|
|
今回、作成したクラスのメモです。
大きく分けて、3つのプロジェクトからなります。
Project | 機能 |
SnmpApplication | Windows Forms のメイン |
SnmpLibrary | SNMP のホストごとのGET/SET/WALK の処理、および各SNMP情報を管理するテーブル操作 |
SnmpTrapHandler | SNMP のトラップの処理 |
以下では、各プロジェクトの主要クラスの関連についてメモっておきます。
SnmpApplication |
SnmpApplication のメインクラス。
ヘルプダイアログ(About)
設定を行うダイアログ(Configure)
ホストの追加を行うダイアログ(AddHostForm)
IPで指定した範囲のホストの追加を行うダイアログ(AddHostRangeForm)
複数のホストのSNMP データを管理するSnmpHostTableクラス。
受信したトラップを管理するための SnmpTrapHandler クラス。
WALKしたデータを管理するためのSnmpWalkData クラス(1つのホストだけ保持する)
|
SnmpLibrary |
Snmp のGET/SET を行うための関連クラスです。
SnmpSession が SnmpMgrプラットフォームSDK のラッパークラスです。
ホストごとのSnmp のデータは、SnmpBase から継承する SnmpMib2Systemか、SnmpWalkData
が保持します。
各ホストのテーブルは、SnmpHostTable が管理します。
Snmp のデータは、C# のCAsnValue クラスから継承するクラスでラップしています。
|
SnmpTrapHandler |
トラップ関連のクラス図です。
トラップ処理を管理するのが SnmpTrapHandler クラスです。
WinSNMPクラスが WinSNMP プラットフォーム SDK へのラッパークラスです。
トラップがきたときのコールバックを処理します。
トラップを受けた場合、SnmpTrapListener がそのデータ(SnmpTrapData) を取得します。トラップデータは
SnmpTrapTable に格納します。
|
|
|
ここまで手を入れるつもりはなかったのだけど、どんどん肥大化する〜〜〜〜〜。インストーラを付けたものをこちらで公開しています。
|