7

我在 C# 中为 .net 下的一家公司开发了一个特殊的应用程序,并且已经使用了多年。现在它已经开发完成,我必须实现的主要新功能之一是通过在某些警报情况下向它发送 SNMP 陷阱来将它与另一个软件集成。

我是一位经验丰富的开发人员,但我从未使用过 SNMP。我用谷歌搜索了一整天,但对这个话题越来越困惑。我没有明确的“起点”。我了解 SNMP 的基础知识,但我不知道从哪里以及如何开始实施。

我有我应该通过 SNMP 陷阱发送的数据,它有大约 10 个属性、一些日期、数字和字符串。我应该在这个属性上创建 MIB 定义。稍后我应该在我的应用程序中实现一个基于这个 MIB 发送 SNMP 陷阱的功能。

该项目是在 c# 中的 .net 4 下开发的。我发现这个库看起来很有希望:http ://sharpsnmplib.codeplex.com/ 它有一些关于发送 SNMP 陷阱的示例。

我的问题是:从哪里开始?如何定义 MIB 文件?我知道它们是一些必须编译的文本文件,但没有找到任何 MIB 编辑器和有关此主题的帮助。

任何帮助表示赞赏!

谢谢!

4

6 回答 6

3

我不是专家,但有和你在同一个地方的经验,终于找到了适合我的项目的东西。

我使用了您之前提到的这个 codeplex 库,发现它非常好。这里有一些提示可以让您浏览http://sharpsnmplib.codeplex.com/

  • 据我了解,当您需要执行 snmpget 和 snmpset 时,需要 MIB 文件
    • 这是您通知服务器和服务器返回您的客户端询问更详细信息的一种方式,如果您需要共享有关您的应用程序的大量信息,则可能需要这样做
  • 如果你需要的只是陷阱,你可以这样做
    • 运行 snmpd.exe,它就像 snmp 服务器接收从您的应用程序发送的陷阱一样。
    • 编写一个类似于 snmptrapd.exe 的程序并发送您的陷阱。

链接http://www.net-snmp.org/wiki/index.php/TUT:snmptrap是一个很好的了解基本知识和获取更多图书馆信息的链接。

编辑:只是错过了一分。如果您对 snmp 使用 get 和 set,您将需要 MIB 文件。如果你只有陷阱,你可能不需要它。

于 2012-01-28T03:00:52.227 回答
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

如果您只需要发送陷阱,则不必定义 MIB。MIB 是为了让其他方了解其中变量的含义。您可以使用其他格式(例如文本文件)对其进行记录。

对于发送陷阱,您可以使用 C# SNMP 库,或者直接调用 snmptrap 程序。Net-snmp 提供了免费的命令行工具来发送陷阱。( http://net-snmp.sf.net )。它的用法很简单。

要验证陷阱是否已成功发出,您可以使用免费的推理 MIB 浏览器 ( http://ireasoning.com/mibbrowser.shtml ) 来接收它们。如果能收到,通常说明你的陷阱没问题。

于 2012-02-08T00:40:12.143 回答
1

由于显然您正在使用 Windows 操作系统来处理 SNMP,因此您需要创建自定义 SNMP 扩展代理,以便将自定义 SNMP OID 和相应的陷阱添加到您的系统中。每个 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

这是使用该库的示例代码:

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 操作系统中使用 SNMP 的文章:链接。本文并不新鲜,但可能会帮助您了解如何在 Windows 中使用 SNMP。

于 2012-02-07T08:35:31.613 回答
1

所以从http://www.net-snmp.org/tutorial/tutorial-5/commands/snmptrap.html

SNMPv2 通知

SNMPv2 通知的格式有些不同。MIB 文件中的定义如下所示

NOTIFICATION-TEST-MIB DEFINITIONS ::= BEGIN
        IMPORTS ucdavis FROM UCD-SNMP-MIB;

demonotifs OBJECT IDENTIFIER ::= { ucdavis 991 }

demo-notif NOTIFICATION-TYPE
    STATUS current
        OBJECTS { sysLocation }
    DESCRIPTION "Just a test notification"
        ::= { demonotifs 17 }

END
于 2015-10-26T17:16:44.490 回答
0

您也可以尝试使用snmpsharpnet,这对于在 .NET 之上使用 SNMP 非常有帮助?

作为 MIB 编辑器,我使用MG-SOFT MIB Browser,专业版与 Visual MIB Builder for Windows 一起出售。

于 2012-02-01T19:45:53.097 回答