private static IPrivacyProvider GetPrivacyProvider(string password, PasswordType passwordType, string encryption, EncryptionType encryptionType) { IPrivacyProvider provider; IAuthenticationProvider auth; if (passwordType == PasswordType.SHA) { auth = new SHA1AuthenticationProvider(new OctetString(password)); } else { auth = new MD5AuthenticationProvider(new OctetString(password)); } if (encryptionType == EncryptionType.DES) { provider = new Security.DESPrivacyProvider(new OctetString(encryption), auth); } else { provider = new Security.AESPrivacyProvider(new OctetString(encryption), auth); } return(provider); }
public async Task <OID> Handle(GetV3Query query) { var discovery = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu); var report = discovery.GetResponse(10000, new IPEndPoint(query.IpAddress, query.Port)); IPrivacyProvider provider; if (query.EncryptionType == EncryptionType.DES) { provider = new Security.DESPrivacyProvider( new OctetString(query.Encryption), new MD5AuthenticationProvider(new OctetString(query.Password))); } else { provider = new Security.AESPrivacyProvider( new OctetString(query.Encryption), new MD5AuthenticationProvider(new OctetString(query.Password))); } var request = new GetRequestMessage( Lextm.SharpSnmpLib.VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(query.UserName), new List <Variable> { new Variable(new ObjectIdentifier(query.OID_Id)) }, provider, Messenger.MaxMessageSize, report); var reply = await request.GetResponseAsync(new IPEndPoint(query.IpAddress, query.Port)); var oid = reply .Pdu().Variables .FirstOrDefault(variable => variable.Id.ToString() == query.OID_Id); if (oid == null) { throw new KeyNotFoundException($"Cannot find variable with ID {query.OID_Id}"); } if (reply.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create("error in response", query.IpAddress, reply); } return(new OID { Id = oid.Id.ToString(), Value = oid.Data.ToString() }); }
public async Task Handle(SetV3Command command) { Discovery discovery = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu); ReportMessage report = discovery.GetResponse(10000, new IPEndPoint(command.IpAddress, command.Port)); IPrivacyProvider provider; if (command.EncryptionType == EncryptionType.DES) { provider = new Security.DESPrivacyProvider( new OctetString(command.Encryption), new MD5AuthenticationProvider(new OctetString(command.Password))); } else { provider = new Security.AESPrivacyProvider( new OctetString(command.Encryption), new MD5AuthenticationProvider(new OctetString(command.Password))); } SetRequestMessage request = new SetRequestMessage( Lextm.SharpSnmpLib.VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString(command.UserName), new List <Variable> { new Variable(new ObjectIdentifier(command.OID.Id), new OctetString(command.OID.Value)) }, provider, report); ISnmpMessage reply = await request.GetResponseAsync(new IPEndPoint(command.IpAddress, command.Port)); if (reply.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create("error in response", command.IpAddress, reply); } }