WindowsのSNMP実装

Windows OS(NT / 2000 / 2003 / 2008 / 2012 など)では、SNMPがOSの標準機能として実装されています。管理ツールのサービスで、「SNMP Service(SNMP.EXE)」と「SNMP Trap Service(SNMPTRAP.EXE)」という2つのWindowsサービスプログラムがあれば、SNMPが動作できる状態です。サービスプログラムが存在しない場合は、Windowsコンポーネントの追加で、ネットワーク管理などの名称で「SNMPサービス」を追加インストールできます。「SNMP Service」は、Windows標準の「SNMPエージェント」でSNMPマネージャからの要求に応じたSNMPエージェントとして動作します。「SNMP Trap Service」は、SNMPマネージャを補助するWindowsサービスプログラムで、SNMP Trapメッセージを受信したらSNMPマネージャに監視します。

SNMPUTIL.exe

Windowsには標準で、「SNMPUTIL」というユーティリティがあります。SNMPUTILは、SNMPマネージャのサンプルアプリケーションで、簡単なGetRequest, SetRequest などが実行できます。SNMPUTILのコマンドには、get,getnext,walkの3種類があります。getは、指定したOID(オブジェクト識別子)の値を取得・表示します。getnextは、指定したOID(オブジェクト識別子)に続く次のオブジェクトの値を取得・表示します。walkは、OID(オブジェクト識別子)によって指定される管理情報ベース (MIB)ブランチをすべて取得・表示します。

SNMP Functions 開発

Windows OS(NT / 2000 / 2003 / 2008 / 2012 など)で SNMPマネージャ、SNMPエージェント(SNMP拡張エージェント)を開発する場合、2種類のAPIライブラリが存在します。また、Visual Studio .NET では、TCP/IPアプリケーションが容易に開発できるため、SNMPプロトコルを理解していれば、APIライブラリを使用しなくてもSNMPマネージャ、エージェントが開発できます。まず、ここでは APIライブラリの1つである「SNMP Functions」について説明します。SNMP Functionsは Platform SDK に含まれるAPIライブラリで、Windows NT 4.0の時代からあるSNMP開発用のライブラリなのですが、一部のAPIではSNMPv1仕様のSNMP拡張エージェント・SNMPマネージャ開発のみサポートしています。SNMPv1仕様だけをサポートするのであれば SNMP Functionsを使用したほうが簡単にプログラミングできます。SNMP Functionsは、「SNMP拡張エージェント API」「SNMPマネージャAPI」「SNMPユーティリティAPI」の3つのグループに分類されています。ユーティリティAPIは共通で使用し、開発する対象により使うAPIが異なります。

SNMP拡張エージェント API

SnmpExtensionClose

SNMP Serviceが SNMP拡張エージェントDLLに対して、リソースの解放と操作の終了を要求する際に呼び出すエントリです。

SnmpExtensionInit

SNMP Serviceが SNMP拡張エージェントDLLに対して、初期化を要求する際に呼び出すエントリです。SNMP拡張エージェントDLLが対象とするMIBのOIDなどを設定して、SNMP Serviceに通知します。

SnmpExtensionInitEx

SNMP Serviceが SNMP拡張エージェントDLLに対して、初期化を要求する際に呼び出すエントリです。

SnmpExtensionMonitor

SNMP Serviceが SNMP拡張エージェントDLLに対して、内部カウンタやパラメータなどを提供させる際に呼び出すエントリです。このAPI(エントリ)は必須ではありません。

SnmpExtensionQuery

SNMP Serviceが SNMP拡張エージェントDLLに対して、SNMP マネージャからのGetRequest / GetNextRequest / SetRequest が要求された際に呼び出すエントリです。このAPI(エントリ)は、SNMPv1のみをサポートしています。

SnmpExtensionQueryEx

SNMP Serviceが SNMP拡張エージェントDLLに対して、SNMP マネージャからのGetRequest/GetNextRequest/SetRequestが要求された際に呼び出すエントリです。このAPI(エントリ)は、SNMPv1とSNMPv2の両方をサポートしています。

SnmpExtensionTrap

SnmpExtensionInitで作成されたイベントがセットされた際に、SNMP Serviceが呼び出すエントリです。Trap情報を設定して呼び元(SNMP Service)に返却すると、SNMP Trapメッセージが送信されます。このAPI(エントリ)は、SNMPv1のみをサポートしています。

SNMPマネージャAPI

SnmpMgrClose

通信ソケットと指定されたSNMPセッションに関連したデータ構造をクローズします。

SnmpMgrCtl

SNMPセッションに関連した操作パラメータを設定します。

SnmpMgrGetTrap

SNMP Trapメッセージを受信します。

SnmpMgrGetTrapEx

SNMP Trapメッセージを受信後、付加的な情報を取得します。

SnmpMgrOidToStr

OIDを文字列に変換します。

SnmpMgrOpen

通信ソケットと関連データ構造を初期化します。

SnmpMgrRequest

指定された操作(GetRequest / GetNextRequest / SetRequest)の実行を要求します。

SnmpMgrStrToOid

文字列をOIDに変換します。

SnmpMgrTrapListen

SNMP Trapメッセージの受信を受け付けます。

SNMPユーティリティAPI

SnmpSvcGetUptime

SNMP Serviceが初期化されてから実行していた時間(100分の1秒単位)を取得します。

SnmpSvcSetLogLevel

SNMP ServiceとSNMP拡張エージェントからのデバッグ出力の詳細のレベルを設定します。

SnmpSvcSetLogType

SNMP ServiceとSNMP拡張エージェントからのデバッグ出力のタイプを設定します。

SnmpUtilAsnAnyCpy

変数バインディングをコピーします。

SnmpUtilAsnAnyFree

AsnAny構造体のメモリを解放します。

SnmpUtilDbgPrint

SNMP Serviceのデバッグ出力を有効(または無効)にします。

SnmpUtilIdsToA

OID(整数型)をNULLで終了する文字列に変換します。

SnmpUtilMemAlloc

プロセスヒープからダイナミックメモリを割り当てます。

SnmpUtilMemFree

ダイナミックメモリを解放します。

SnmpUtilMemReAlloc

ダイナミックメモリを再割り当てします。

SnmpUtilOctetsCmp

2つのOCTET STRING型のデータを比較します。

SnmpUtilOctetsCpy

OCTET STRING型のデータをコピーします。

SnmpUtilOctetsFree

OCTET STRING型のデータエリアを解放します。

SnmpUtilOctetsNCmp

2つのOCTET STRING型のデータを指定サイズ分、比較します。

SnmpUtilOidAppend

元のOIDに、指定のOIDを追加します。

SnmpUtilOidCmp

2つのOIDを比較します。

SnmpUtilOidCpy

OIDをコピーします。

SnmpUtilOidFree

OIDのデータエリアを解放します。

SnmpUtilOidNCmp

2つのOIDを指定サイズ分、比較します。

SnmpUtilOidToA

OID(OID型)をNULLで終了する文字列に変換します。

SnmpUtilPrintAsnAny

AsnAny構造体型のデータを標準出力に表示します。

SnmpUtilPrintOid

OID型のデータを標準出力に表示します。

SnmpUtilVarBindCpy

変数バインディングをコピーします。

SnmpUtilVarBindListCpy

変数バインディングリストをコピーします。

SnmpUtilVarBindFree

変数バインディングのデータエリアを解放します。

SnmpUtilVarBindListFree

変数バインディングリストのデータエリアを解放します。

SNMP Functionsのサンプルコード

SNMPマネージャからSNMPエージェントに対して、(固定OIDに対する)Getメッセージを送信して情報収集するサンプルプログラムです。Visual C++(言語としては C言語)です。

SNMPマネージャ(Get) のサンプル 1

SNMPマネージャ(Get) のサンプル 2

SNMPマネージャ(Get) のサンプル 3

SNMPマネージャ(Get) のサンプル 4

SNMPマネージャ(Get) のサンプル 5

SNMPマネージャ(Get) のサンプル 6

WinSnmp API 開発

ここでは、WindowsでSNMPマネージャ、SNMPエージェントを開発する際に使用する「WinSnmp API」について説明します。WinSnmp APIは Platform SDK に含まれるAPIライブラリで、Windows 2000以降で登場したSNMP開発用のライブラリで、SNMPv1仕様とSNMPv2仕様のSNMP拡張エージェント・SNMPマネージャが開発できます。SNMPv1、SNMPv2の両方をサポートするのであれば 若干プログラミングが複雑なのですが WinSNMP APIを使用するほうがよいでしょう。

WinSNMP APIは、「コミュニケーションAPI」「エンティティ・コンテキストAPI」「データベースAPI」「PDU API」「ユーティリティAPI」「変数バインディングAPI」の6つのグループに分類されています。SNMP Functions では、SNMP拡張エージェントAPIなどのように、開発する対象ごとにAPIがグループ分類されていましたが、WinSNMP APIでは、SNMP Functionsとはアーキテクチャが異なり、WinSNMPの実装(WSNMP32.DLL)とのインターフェイス(やり取り)という考え方となっています。

WinSNMP コミュニケーションAPI

コミュニケーションAPI は、WinSNMP APIを利用するアプリケーションとWinSNMPの実装であるWSNMP32.DLLとのインターフェースを提供します。WSNMP32.DLLでは、WinSNMP APIを利用するアプリケーションと他の管理エンティティとを対応付けします。

SnmpCancelMsg, SnmpCleanup, SnmpClose, SnmpCreateSession, SnmpListen, SnmpOpen, SnmpRecvMsg, SnmpRegister, SnmpSendMsg, SnmpStartup

WinSNMP エンティティ・コンテキストAPI

エンティティ・コンテキストAPIは、WinSNMP APIを利用するアプリケーションが、SNMPエンティティとコンテキストに対するアクセスを提供するAPIです。WinSNMPの実装(WSNMP32.DLL)は、エンティティとコンテキストの名称を、SNMPv1 またはSNMPv2の名称に変換します。

SnmpContextToStr, SnmpEntityToStr, SnmpFreeContext, SnmpFreeEntity, SnmpSetPort, SnmpStrToContext, SnmpStrToEntity

WinSNMP データベースAPI

データベースAPI は、WinSNMP APIを利用するアプリケーションに、WinSNMPの実装(WSNMP32.DLL)が保持している現在の管理情報を提供するためのAPIです。データベースAPIは、再送信モードの変更、エンティティの変更、コンテキストの変換モードの変更などができます。

SnmpGetRetransmitMode, SnmpGetRetry, SnmpGetTimeout, SnmpGetTranslateMode, SnmpGetVendorInfo, SnmpSetRetransmitMode, SnmpSetRetry, SnmpSetTimeout, SnmpSetTranslateMode

WinSNMP PDU API

PDU API は、WinSNMP APIを利用するアプリケーションが、SNMPメッセージ(PDU)を展開(または更新)する際に使用するAPIです。コミュニケーションAPIのSnmpRecvMsg、SnmpSendMsgを呼び出す際や、後述するユーティリティAPI のSnmpDecodeMsg、SnmpEncodeMsgを呼び出す際に、使用します。

SnmpCreatePdu, SnmpDuplicatePdu, SnmpFreePdu, SnmpGetPduData, SnmpSetPduData

WinSNMP ユーティリティAPI

ユーティリティAPI は、WinSNMP APIを利用するアプリケーションに、MIBオブジェクトを管理する機能と、SNMPメッセージのエンコード・デコードする機能を提供するAPIです。

SnmpDecodeMsg, SnmpEncodeMsg, SnmpFreeDescriptor, SnmpGetLastError, SnmpOidCompare, SnmpOidCopy, SnmpOidToStr, SnmpStrToOid

WinSNMP 変数バインディングAPI

変数バインディングAPI は、WinSNMP APIを利用するアプリケーションに、SNMPメッセージ(PDU)内の変数バインディングを操作する機能を提供するAPIです。

SnmpCountVbl, SnmpCreateVbl, SnmpDeleteVb, SnmpDuplicateVbl, SnmpFreeVbl, SnmpGetVb, SnmpSetVb



風水吉凶方位 風水吉凶方位 |  奇門遁甲 奇門遁甲 |  金運神社 金運神社 |  仏像 仏像 |  論語 論語 |  般若心経 般若心経 |  二十四節気 二十四節気 |  菜根譚 菜根譚 |  SharePoint活用 SharePoint |  OneNote活用 OneNote |  ICT活用 ICT