.NET中的自定义SNMP陷阱实现

时间:2009-10-02 21:47:53

标签: c# vb.net snmp snmp-trap

我需要使用SNMP(在.NET中)创建一个监视机制。我想我们将使用nsoftware component来处理大部分工作。

看来我们必须使用'陷阱'来从代理与服务器进行通信。我们将有许多不同的陷阱和各种信息详细说明每个陷阱。实现自定义陷阱的最佳方法是什么?也就是说,不仅要发送陷阱,还要将描述陷阱的信息发送给我们的'snmp manager',最好的方法是什么?我认为这是通过“变量绑定”完成的。要使用“变量绑定”,我们是否需要创建自己的“企业编号”并使用“enterpriseSpecific”陷阱?我们应该实现自己的自定义MIB,还是只需通过陷阱(通过变量绑定)发送我们需要的数据?

2 个答案:

答案 0 :(得分:4)

除非您想要通知5个预定义陷阱中的一个(例如冷启动,热启动):是的,您必须定义一个企业特定陷阱,并且您需要分配对象标识符(以及其中的大量标识符)。

参数确实在变量绑定中传输;这些结构定义为

VarBind ::=
         SEQUENCE {
           name ObjectName,
           value ObjectSyntax
         }

VarBindList ::= SEQUENCE OF VarBind

ObjectName ::= OBJECT IDENTIFIER
ObjectSyntax ::= CHOICE {
     simple SimpleSyntax,
     application-wide ApplicationSyntax
}

SimpleSyntax ::= CHOICE {
     number INTEGER,
     string OCTET STRING,
     object OBJECT IDENTIFIER,
     empty  NULL
}

ApplicationSyntax ::=  CHOICE {
      address  NetworkAddress,
      counter  Counter,
      gauge    Gauge,
      ticks    TimeTicks,
      arbitrary  Opaque
}

你需要告诉你的图书馆名称和价值是多少;该库应提供API以支持可用作值的各种数据类型。请注意,变量“names”也是对象标识符。

答案 1 :(得分:1)

我建议您首先确定您的代理将数据发送回服务器/监视器的情况。

然后你需要决定如何区分这些情况(使用不同的ID或打包不同的变量绑定)。

现在在一张纸上写下几个数据包,然后开始在MIB文档中创建陷阱定义。

接下来的内容取决于您使用哪个库来实现对话。好吧,'nsoftware one是个不错的选择。

BTW,我宁愿发送TRAP v2数据包或INFORM而不是TRAP v1。

此致

李克强 http://sharpsnmplib.codeplex.com