0

我将使用 shrarpsnmp 库为 SNMPv2 设备开发管理器。我不明白我应该使用那种 API。例如,我想调用 snmp get request 到设备。有两种方法可以做到这一点:

1)

GetRequestMessage request = new GetRequestMessage(VersionCode.V2,         
Messenger.NextMessageId, Messenger.NextRequestId, new OctetString("myname"), 
new List<variable>{new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0"))}, 
priv, Messenger.MaxMessageSize, report);

ISnmpMessage reply = request.GetResponse(60000, new 
IPEndPoint(IPAddress.Parse("192.168.1.2"), 161));

if (reply.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError
{
throw ErrorException.Create(
"error in response",
 IPAddress.Parse("192.168.1.2"),
 reply);
}

2)

   var result = Messenger.Get(VersionCode.V2,
   new IPEndPoint(IPAddress.Parse("192.168.1.2"), 161),
   new OctetString("public"),
   new List<Variable>{new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0"))},
   60000);

这两种方法有什么区别?哪个可以正确使用 SNMPv2,或者可以使用哪个?

4

2 回答 2

1

根据开发者网站,Messenger.Get 已过时。

https://help.sharpsnmp.com/html/M_Lextm_SharpSnmpLib_Messaging_Messenger_Get.htm

这里有一些关于 GetRequestMessage 的信息

https://help.sharpsnmp.com/html/T_Lextm_SharpSnmpLib_Messaging_GetRequestMessage.htm

于 2017-08-22T09:46:31.040 回答
0
var result = Messenger.Get(VersionCode.V1,
                           new IPEndPoint(IPAddress.Parse("192.168.1.2"), 161),
                           new OctetString("public"),
                           new List<Variable>{new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0"))},
                           60000);

此请求适用于 V1 和 V2。因为身份验证和隐私不适用于 V1 和 V2。所以对V1和V2使用这种方法。

var auth = new SHA1AuthenticationProvider(new OctetString("myauthenticationpassword"));
var priv = new DESPrivacyProvider(new OctetString("myprivacypassword"), auth);

GetRequestMessage request = new GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString("myname"), new List<variable>{new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0"))}, priv, Messenger.MaxMessageSize, report);

ISnmpMessage reply = request.GetResponse(60000, new IPEndPoint(IPAddress.Parse("192.168.1.2"), 161));

在这里你可以看到 Get Method 中传递了身份验证和隐私,因为我们是 Request for V3,所以需要身份验证和隐私。您可以将它用于 V1 和 V2,但这没有任何意义,因为 V1 和 V2 不需要身份验证和隐私。

有关更多信息,请参阅此处,这是 V3 中添加的新功能。

于 2017-08-24T04:15:52.680 回答