我将使用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,还是可以使用?
答案 0 :(得分: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
答案 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中添加的新功能。