宇宙仮面の C# プログラミング
   

Top

C# 2005

C# 2003

C# Windows Mobile

SQL Server 2005

SQL Server 2000

Virtual PC/Server

C# 研究室ブログ

C# ソフトウェア ダウンロード

C# 開発環境

宇宙仮面の C# プログラミングについて

.NET/C# eGroup JP

INETA Japan



Google
Web
uchukamen.com









SNMPを使う

開発環境: Visual Studio 2003 

1.目次

1.目次
2.目的
3.参考書
4.Windows での SNMP Agent の起動
5.SNMPについて
6.Snmpクラス概要
7.SNMP_Test_Tool

2.目的

Platform SDK から、SNMPで情報を取得する方法です。
SNMP とは、Simple Network Management Protocol の略で、ルータなどのネットワークデバイスの状態を取得するプロトコルです。
最初は、プラットフォームSDKの動作を確認するぐらいでやめるつもりだったのだけれど、いろいろうまくいかないで、次々に手を入れることになってしまいました 。とても厄介です。

と、四苦八苦していたところ、河端さんからの情報で、WMI から SNMP をアクセスできるそうです。試してませんが、マネージドコードで処理できるので、WMI→SNMP のほうがずっと楽にできると思います。プラットフォームSDK経由の SNMP ではなくて、WMI 経由のSNMP にしたほうがいいと思います。

ともあれ、Platform SDK のSNMPアクセスや、非同期コールなどせっかく調べたので、メモっておきます。

リスト画面


Get(WALK)したところ


Trap を受信したところ

3.参考書

(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

4.Windows での SNMP Agent の起動

 
テストのために、自分自身のPCへSNMPでのアクセスを行います。
そこで、Windows の SNMP Agent を起動しておく必要があります。

次のように、Windows の SNMP Service を起動しておきます。




次に、SNMP Service のプロパティで、コミュニティ名、トラップ送信先をアプリケーションを動かすホスト名を指定します。


次に、SNMP Service のセキュリティで、受け付けるコミュニティ名と、権利を指定します。
ここでは、一般的な public と private という名前にしておきますが、これはセキュリティホールになりますから、気をつけてください。
何をいっているのかわからない人は、危険なのでまずSNMPを勉強してからにしましょう。


5.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 の処理ができるなら、そちらがお勧めです。

6.Snmpクラス概要

  
今回、作成したクラスのメモです。
大きく分けて、3つのプロジェクトからなります。

Project機能
SnmpApplicationWindows Forms のメイン
SnmpLibrarySNMP のホストごとのGET/SET/WALK の処理、および各SNMP情報を管理するテーブル操作
SnmpTrapHandlerSNMP のトラップの処理
  
以下では、各プロジェクトの主要クラスの関連についてメモっておきます。

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 に格納します。


7.SNMP Test Tool

ここまで手を入れるつもりはなかったのだけど、どんどん肥大化する〜〜〜〜〜。インストーラを付けたものをこちらで公開しています。
このページを評価する

このページを評価する

悪い             良い
1 2 3 4 5
コメント(一言お願いします)