2017-08-22 101 views
0

我将使用shrarpsnmp库来开发用于SNMPv2设备的Manager。 我不明白我应该使用哪种API。例如,我想呼叫snmp获取请求到设备。 存在两种方式来做到这一点:Sharpsnmp SNMPv2和SNMPv3的API差别

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

+0

1,你选择了一个错误的构造函数。 https://github.com/lextm/sharpsnmplib/blob/master/SharpSnmpLib/Messaging/Messenger.cs#L547'Messenger.Get'的源代码可以告诉你使用哪一个。当然,即使你使用错误的构造函数,它仍然可以工作,并且负面影响是一些参数被浪费了。 –

回答

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中增加的新功能。