SNMPv2和SNMPv3的Sharpsnmp API差异

时间:2017-08-22 09:40:22

标签: c# snmp sharp-snmp

我将使用shrarpsnmp库来开发SNMPv2设备的Manager。 我不明白我应该使用哪种API。例如,我想要对设备调用snmp get请求。 有两种方法可以做到这一点:

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,还是可以使用?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分: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方法中传递了身份验证和隐私,因为我们是V3请求,因此需要身份验证和隐私。 您可以将它用于V1和V2,但这没有任何意义,因为V1和V2不需要身份验证和隐私。

有关详情,请参阅Here这是V3中添加的新功能。