Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.net下定义MIB并发送SNMP陷阱_.net_Snmp_Mib_Sharp Snmp_Snmp Trap - Fatal编程技术网

在.net下定义MIB并发送SNMP陷阱

在.net下定义MIB并发送SNMP陷阱,.net,snmp,mib,sharp-snmp,snmp-trap,.net,Snmp,Mib,Sharp Snmp,Snmp Trap,我在C#中为一家公司在.net下开发了一个特殊的应用程序,已经使用多年了。现在它是在上开发的,我必须实现的主要新功能之一是在某些警报情况下通过向它发送SNMP陷阱将它与另一个软件集成 我是一名经验丰富的开发人员,但我从未使用过SNMP。我在谷歌上搜索了一整天,但对这个话题越来越困惑。我没有一个明确的“起点”。我了解SNMP的基本知识,但不知道从何处开始实施以及如何开始实施 我有我应该通过SNMP陷阱发送的数据,它有大约10个属性、一些日期、数字和字符串。我应该在此属性上创建MIB定义。稍后,我应

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

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

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

该项目是在c#中的.NET4下开发的。我发现这个图书馆似乎很有希望: 它有一些关于发送SNMP陷阱的示例

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

感谢您的帮助


谢谢

我不是一名专家,但我有过与您在同一地点的经历,最终为我的项目找到了足够的东西

我使用了您之前提到的这个codeplex库,发现它非常好。这里有一些建议供你参考

  • 据我所知,当您需要执行snmpget和snmpset时,需要一个MIB文件
    • 这是一种你通知服务器和服务器返回到你的客户要求更详细的信息,如果你需要关于你的应用程序的广泛信息共享,可能需要这样做
  • 如果你所需要的只是陷阱,你可以这样做
    • 运行snmpd.exe,其作用类似于接收应用程序发送的陷阱的snmp服务器
    • 编写一个类似snmptrapd.exe的程序并发送陷阱
这个链接是一个很好的获取基本理解和更多图书馆信息的链接

编辑:刚刚错过了一点。如果使用snmp的get和set,则需要MIB文件。如果您只有陷阱,您可能不需要它。

您还可以尝试在.NET顶部使用SNMP非常有用的陷阱


正如我使用的MIB编辑器一样,Professional edition随Windows的Visual MIB Builder一起销售。

在SNMP V2 MIB中,陷阱被描述为通知。请参见此处此类MIB的完整示例:

由于您显然是在使用Windows操作系统来处理SNMP,因此您需要创建自定义SNMP扩展代理,以便在系统中添加自定义SNMP OID和相应的陷阱。每个OID都会显示一个变量,您可以在其中存储信息。据我所知,MIB文件仅在Windows中用作SNMP代理的参考,在不创建自定义SNMP代理的情况下,不能用于添加新OID

当您拥有自定义SNMP代理DLL时,需要将其指向注册表。可以这样做(示例):

之后,您需要重新启动SNMP服务。如果一切正常,您将能够使用新的自定义OID设置\获取一些数据

为了读取/写入SNMP变量,您需要使用SNMP管理器。我经常这样做。还有一些GUI管理器将在调试过程中使用,例如:

下面是使用该库的示例代码:

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。

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

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

要验证陷阱是否已成功发送,可以使用免费的ireasoning MIB浏览器()接收陷阱。如果能收到,通常意味着你的陷阱很好。

所以从

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

“您需要创建自定义SNMP扩展代理”。这是十五年前的事(当我上次做任何SNMP编程时),但现在您可以使用新的WinSNMP API中的SnmpSendMsg发送陷阱(尽管这已经有十多年的历史了)。这里的示例:如果是,那么如何定义SNMP陷阱的格式(“数据字段”)?user814168。。。我理解你的大部分答案,但你为什么说,
你不必定义mib。MIB是供其他各方理解的。
您的确切意思是什么?即使您只是发送陷阱并且不需要MIB,您是否仍然需要所有SNMP配置,如MIBname、MIBvalue、MIBtype、community、OID、generic、specific等,以便成功发送另一台计算机可以成功接受和处理的陷阱。否则,它将丢弃数据包。我这样想对吗?
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