Разница API Sharpsnmp для SNMPv2 и SNMPv3
Я собираюсь использовать библиотеку shrarpsnmp для разработки Manager для устройств 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, или может быть использован?
2 ответа
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
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.
Подробнее см. Здесь, которые являются новыми функциями, добавленными в V3.