7

私は C# で .net の下に会社用の特別なアプリケーションを開発しましたが、それは何年も使用されています。今は開発中ですが、私が実装しなければならない主な新機能の 1 つは、アラート状況で SNMP トラップを送信することにより、別のソフトウェアと統合することです。

私は経験豊富な開発者ですが、SNMP を使用したことはありません。私は一日中グーグルで検索しましたが、このトピックについてますます混乱しています. 私には明確な「出発点」がありません。SNMP の基本は理解していますが、実装を開始する場所と方法がわかりません。

SNMP トラップ経由で送信するデータがあります。10 個のプロパティ、いくつかの日付、数字、および文字列があります。このプロパティに MIB 定義を作成する必要があります。後で、この MIB に基づいて SNMP トラップを送信する機能をアプリケーションに実装する必要があります。

このプロジェクトは、C# の .net 4 で開発されています。有望と思われるこのライブラリを見つけました: http://sharpsnmplib.codeplex.com/ SNMP トラップの送信に関するサンプルがあります。

私の問題は次のとおりです。どこから始めますか? MIB ファイルを定義するにはどうすればよいですか? それらがコンパイルする必要のあるテキスト ファイルであることは知っていますが、MIB エディタやこのトピックに関するヘルプは見つかりませんでした。

どんな助けでも大歓迎です!

ありがとう!

4

6 に答える 6

3

私は専門家ではありませんが、あなたと同じ場所にいた経験があり、最終的に私のプロジェクトに十分なものを見つけました.

私はあなたが以前に参照したこのコードプレックス ライブラリを使用しましたが、非常に優れていることがわかりました。http://sharpsnmplib.codeplex.com/を参照するためのヒントを次に示します。

  • 私の理解では、snmpget と snmpset を実行する必要がある場合は MIB ファイルが必要です。
    • これは、サーバーに通知し、サーバーがクライアントに戻って詳細な情報を要求するようなものであり、アプリに関する広範な情報を共有する必要がある場合に必要になる場合があります
  • 必要なのはトラップだけの場合は、これを行うことができます
    • アプリケーションから送信されたトラップを受信する snmp サーバーのように動作する snmpd.exe を実行します。
    • snmptrapd.exe に似たプログラムを作成し、トラップを送信します。

リンクhttp://www.net-snmp.org/wiki/index.php/TUT:snmptrapは、基本的な理解を得て、より多くのライブラリ情報を取得するのに適しています。

編集: 1 つのポイントを逃しただけです。snmp に get と set を使用する場合は、MIB ファイルが必要です。トラップしかない場合は、必要ないかもしれません。

于 2012-01-28T03:00:52.227 に答える
1

トラップを送信するだけであれば、MIB を定義する必要はありません。MIB は、他の関係者が MIB 内の変数の意味を理解するためのものです。テキストファイルなどの他の形式を使用して文書化できます。

トラップを送信するには、C# SNMP ライブラリを利用するか、snmptrap プログラムを直接呼び出すだけです。Net-snmp は、トラップを送信するための無料のコマンド ライン ツールを提供します。( http://net-snmp.sf.net )。その使用法は非常に簡単です。

トラップが正常に送信されたかどうかを確認するには、無料の ireasoning MIB ブラウザ ( http://ireasoning.com/mibbrowser.shtml ) を使用してトラップを受信できます。受信できる場合は、通常、トラップが正常であることを意味します。

于 2012-02-08T00:40:12.143 に答える
1

SNMP V2 MIB では、トラップは NOTIFICATION として記述されます。このような MIB の完全な例については、http: //tools.cisco.com/Support/SNMP/do/BrowseMIB.do?local=en&mibName=CISCO-EPM-NOTIFICATION- MIB を参照してください。

于 2012-02-05T08:03:38.937 に答える
1

どうやら Windows OS を使用して SNMP を操作しているため、カスタム SNMP OID と対応するトラップをシステムに追加するには、カスタム SNMP 拡張エージェントを作成する必要があります。各 OID は文字通り、情報を格納できる変数を表します。このような DLL の例を次に示します。私の知る限り、MIB ファイルは Windows で SNMP エージェントの参照としてのみ使用され、カスタム SNMP エージェントを作成しない限り、新しい OID を追加するために使用することはできません。

カスタム SNMP エージェント DLL を作成したら、それをレジストリで指定する必要があります。そのようにすることができます(例):

[HKEY_LOCAL_MACHINE\SOFTWARE\Symbol\MyAgent\CurrentVersion]
"Pathname"="C:\\MyCustomAgent\\MyAgent.dll"

;Add number of agent to the list (max num registered + 1)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents]
"10"="SOFTWARE\\Symbol\\MyAgent\\CurrentVersion"

その後、SNMP サービスを再起動する必要があります。すべてが正しければ、新しいカスタム OID を使用してデータを設定/取得できます。

SNMP 変数に読み書きするには、SNMP マネージャーを使用する必要があります。私は通常、そのためにSharpsnmplibを使用しています。デバッグ プロセス中に役立つ GUI マネージャーもあります。たとえば、iReasoning MIB Browserです。

その lib を使用するサンプル コードを次に示します。

using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
// SNMP Lib references
using Lextm.SharpSnmpLib;
using Mono.Options;
using Lextm.SharpSnmpLib.Messaging;
using Lextm.SharpSnmpLib.Security;
...
List vList = new List();
ISnmpData data;
data = new OctetString("test"); // variable to add in to string OID
Variable test = new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.6.0"), data); // OID
vList.Add(test);
VersionCode versionH = VersionCode.V2; // SNMP protocol version to use
IPAddress ipH;
IPAddress.TryParse("127.0.0.1", out ipH);
IPEndPoint receiverH = new IPEndPoint(ipH, 161);
foreach (Variable variable in
        Messenger.Set(versionH, receiverH, new OctetString("private"), vList, 10))// set variable
        // Arguments: (ver of SNMP, IP, group, iList containing OID and variable, timeoout)
        {
            // output variable
        }
...

また、technet の Windows OS での SNMP の使用に関する記事を読むことができます:リンク。この記事は新しいものではありませんが、Windows で SNMP を使用する方法を理解するのに役立つかもしれません。

于 2012-02-07T08:35:31.613 に答える
0

また、.NET 上で SNMP を操作するのに非常に役立つsnmpsharpnetを試すこともできます。

MIB エディタとしてMG-SOFT MIB Browserを使用していますが、profesional 版は Visual MIB Builder for Windows と一緒に販売されています。

于 2012-02-01T19:45:53.097 に答える