public void TestReportFailure() { if (!DESPrivacyProvider.IsSupported) { return; } const string data = "30 70 02 01 03 30" + "11 02 04 76 EB 6A 22 02 03 00 FF F0 04 01 01 02 01 03 04 33 30 31 04 09" + "80 00 05 23 01 C1 4D BB 83 02 01 5B 02 03 1C 93 9D 04 0C 4D 44 35 5F 44" + "45 53 5F 55 73 65 72 04 0C E5 C7 C5 2E 17 7E 87 62 AB 56 D6 C7 04 00 30" + "23 04 00 04 00 A8 1D 02 01 00 02 01 00 02 01 00 30 12 30 10 06 0A 2B 06" + "01 06 03 0F 01 01 02 00 41 02 05 EE"; var bytes = ByteTool.Convert(data); const string userName = "******"; const string phrase = "AuthPassword"; const string privatePhrase = "PrivPassword"; IAuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString(phrase)); IPrivacyProvider priv = new DESPrivacyProvider(new OctetString(privatePhrase), auth); var users = new UserRegistry(); users.Add(new User(new OctetString(userName), priv)); var messages = MessageFactory.ParseMessages(bytes, users); Assert.Equal(1, messages.Count); var message = messages[0]; Assert.Equal(1, message.Variables().Count); }
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); }
private IPrivacyProvider CreateKeys() { IAuthenticationProvider auth = null; IPrivacyProvider priv = null; switch (ConnectionOptions.Authentication) { case Authentication.MD5: auth = new MD5AuthenticationProvider(new OctetString(ConnectionOptions.SNMPPass)); break; case Authentication.SHA: auth = new SHA1AuthenticationProvider(new OctetString(ConnectionOptions.SNMPPass)); break; } switch (ConnectionOptions.Encryption) { case Encryption.AES: priv = new AESPrivacyProvider(new OctetString(ConnectionOptions.SNMPEncryptionKey), auth); break; case Encryption.DES: priv = new DESPrivacyProvider(new OctetString(ConnectionOptions.SNMPEncryptionKey), auth); break; } return(priv); }
public void TestGetRequestV3AuthPriv() { const string bytes = "30 81 80 02 01 03 30 0F 02 02 6C 99 02 03 00 FF" + "E3 04 01 07 02 01 03 04 38 30 36 04 0D 80 00 1F" + "88 80 E9 63 00 00 D6 1F F4 49 02 01 14 02 01 35" + "04 07 6C 65 78 6D 61 72 6B 04 0C 80 50 D9 A1 E7" + "81 B6 19 80 4F 06 C0 04 08 00 00 00 01 44 2C A3" + "B5 04 30 4B 4F 10 3B 73 E1 E4 BD 91 32 1B CB 41" + "1B A1 C1 D1 1D 2D B7 84 16 CA 41 BF B3 62 83 C4" + "29 C5 A4 BC 32 DA 2E C7 65 A5 3D 71 06 3C 5B 56" + "FB 04 A4"; MD5AuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString("testpass")); var registry = new UserRegistry(); registry.Add(new OctetString("lexmark"), new DESPrivacyProvider(new OctetString("passtest"), auth)); IList <ISnmpMessage> messages = MessageFactory.ParseMessages(bytes, registry); Assert.AreEqual(1, messages.Count); GetRequestMessage get = (GetRequestMessage)messages[0]; Assert.AreEqual(27801, get.MessageId); //Assert.AreEqual(SecurityLevel.None | SecurityLevel.Reportable, get.Level); Assert.AreEqual("lexmark", get.Community.ToString()); //OctetString digest = new MD5AuthenticationProvider(new OctetString("testpass")).ComputeHash(get); //Assert.AreEqual(digest, get.Parameters.AuthenticationParameters); }
public void TestPasswordToKey() { byte[] password = Encoding.ASCII.GetBytes("testpass"); byte[] engineId = new byte[] { 0x80, 0x00, 0x1F, 0x88, 0x80, 0xE9, 0x63, 0x00, 0x00, 0xD6, 0x1F, 0xF4, 0x49 }; byte[] key = new MD5AuthenticationProvider(new OctetString("")).PasswordToKey(password, engineId); Assert.AreEqual(new byte[] { 226, 221, 44, 186, 149, 93, 73, 79, 237, 69, 120, 155, 145, 7, 44, 255 }, key); }
public void TestException() { var provider = new MD5AuthenticationProvider(new OctetString("longlongago")); Assert.Equal("MD5 authentication provider", provider.ToString()); Assert.Throws <ArgumentNullException>(() => new MD5AuthenticationProvider(null)); Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(null, null)); Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(new byte[0], null)); Assert.Throws <ArgumentException>(() => provider.PasswordToKey(new byte[0], new byte[0])); }
static IPrivacyProvider CreatePrivacyProvider(string authenticationUser, SnmpAuthenticationProtocol authenticationProtocol, string authenticationPassword, SnmpPrivacyProtocol privacyProtocol, string privacyPassword) { try { if (authenticationPassword == null) { throw new ArgumentNullException(nameof(authenticationPassword)); } IAuthenticationProvider authenticationProvider; switch (authenticationProtocol) { case SnmpAuthenticationProtocol.SHA1: authenticationProvider = new SHA1AuthenticationProvider(new OctetString(authenticationPassword)); break; case SnmpAuthenticationProtocol.MD5: authenticationProvider = new MD5AuthenticationProvider(new OctetString(authenticationPassword)); break; default: throw new InvalidOperationException($"Unknown authentication protocol '{authenticationProtocol}'."); } switch (privacyProtocol) { case SnmpPrivacyProtocol.None: return(new DefaultPrivacyProvider(authenticationProvider)); case SnmpPrivacyProtocol.DES: if (privacyPassword == null) { throw new ArgumentNullException(nameof(privacyPassword)); } return(new BouncyCastleDESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider)); case SnmpPrivacyProtocol.AES: if (privacyPassword == null) { throw new ArgumentNullException(nameof(privacyPassword)); } return(new BouncyCastleAESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider)); default: throw new InvalidOperationException($"Unknown privacy protocol '{privacyProtocol}'."); } } catch (Exception e) { throw new InvalidOperationException($"Could not create SNMP user '{authenticationUser}'.", e); } }
public void TestResponseVersion3() { var engine = CreateEngine(); engine.Listener.ClearBindings(); var serverEndPoint = new IPEndPoint(IPAddress.Loopback, Port.NextId); engine.Listener.AddBinding(serverEndPoint); engine.Start(); try { IAuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString("authentication")); IPrivacyProvider priv = new DefaultPrivacyProvider(auth); var ending = new AutoResetEvent(false); var timeout = 3000; Discovery discovery = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu); ReportMessage report = discovery.GetResponse(timeout, serverEndPoint); var expected = Messenger.NextRequestId; GetRequestMessage request = new GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, expected, new OctetString("authen"), OctetString.Empty, new List <Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0")) }, priv, Messenger.MaxMessageSize, report); var source = Observable.Defer(() => { ISnmpMessage reply = request.GetResponse(timeout, serverEndPoint); return(Observable.Return(reply)); }) .RetryWithBackoffStrategy( retryCount: 4, retryOnError: e => e is Messaging.TimeoutException ); source.Subscribe(reply => { ISnmpPdu snmpPdu = reply.Pdu(); Assert.Equal(SnmpType.ResponsePdu, snmpPdu.TypeCode); Assert.Equal(expected, reply.RequestId()); Assert.Equal(ErrorCode.NoError, snmpPdu.ErrorStatus.ToErrorCode()); ending.Set(); }); Assert.True(ending.WaitOne(MaxTimeout)); } finally { if (SnmpMessageExtension.IsRunningOnWindows) { engine.Stop(); } } }
public void TestException() { var provider = new MD5AuthenticationProvider(new OctetString("longlongago")); Assert.AreEqual("MD5 authentication provider", provider.ToString()); Assert.Throws<ArgumentNullException>(() => new MD5AuthenticationProvider(null)); Assert.Throws<ArgumentNullException>(() => provider.PasswordToKey(null, null)); Assert.Throws<ArgumentNullException>(() => provider.PasswordToKey(new byte[0], null)); Assert.Throws<ArgumentException>(() => provider.PasswordToKey(new byte[0], new byte[0])); Assert.Throws<ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, null, null, null, null)); Assert.Throws<ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, null, null, null)); Assert.Throws<ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), null, null)); // Assert.Throws<ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), OctetString.Empty, null)); }
public void TestException() { var provider = new MD5AuthenticationProvider(new OctetString("longlongago")); Assert.AreEqual("MD5 authentication provider", provider.ToString()); Assert.Throws <ArgumentNullException>(() => new MD5AuthenticationProvider(null)); Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(null, null)); Assert.Throws <ArgumentNullException>(() => provider.PasswordToKey(new byte[0], null)); Assert.Throws <ArgumentException>(() => provider.PasswordToKey(new byte[0], new byte[0])); Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, null, null, null, null)); Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, null, null, null)); Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), null, null)); Assert.Throws <ArgumentNullException>(() => provider.ComputeHash(VersionCode.V1, Header.Empty, SecurityParameters.Create(new OctetString("test")), OctetString.Empty, null)); }
// authNoPriv private IPrivacyProvider GetPrivacy(SNMPv3AuthenticationProvider authProvider, string auth) { IAuthenticationProvider authenticationProvider; if (authProvider == SNMPv3AuthenticationProvider.MD5) { authenticationProvider = new MD5AuthenticationProvider(new OctetString(auth)); } else { authenticationProvider = new SHA1AuthenticationProvider(new OctetString(auth)); } return(new DefaultPrivacyProvider(authenticationProvider)); }
private void txtBytes_TextChanged(object sender, EventArgs e) { tvMessage.Nodes.Clear(); var users = new UserRegistry(); IAuthenticationProvider authen; if (tscbAuthentication.SelectedIndex == 0) { authen = DefaultAuthenticationProvider.Instance; } else if (tscbAuthentication.SelectedIndex == 1) { authen = new MD5AuthenticationProvider(new OctetString(tstxtAuthentication.Text)); } else { authen = new SHA1AuthenticationProvider(new OctetString(tstxtAuthentication.Text)); } IPrivacyProvider privacy; if (tscbPrivacy.SelectedIndex == 0) { privacy = new DefaultPrivacyProvider(authen); } else if (tscbPrivacy.SelectedIndex == 1) { privacy = new DESPrivacyProvider(new OctetString(tstxtPrivacy.Text), authen); } else { privacy = new AESPrivacyProvider(new OctetString(tstxtPrivacy.Text), authen); } users.Add(new User(new OctetString(tstxtUser.Text), privacy)); try { var messages = MessageFactory.ParseMessages(ByteTool.Convert(txtBytes.Text.Replace("\"", null).Replace("+", null)), users); messages.Fill(tvMessage); } catch (Exception ex) { tvMessage.Nodes.Add(ex.Message); } }
public void TestConstructorV2AuthMd5PrivDes() { if (!DESPrivacyProvider.IsSupported) { return; } const string bytes = "30 81 80 02 01 03 30 0F 02 02 6C 99 02 03 00 FF" + "E3 04 01 07 02 01 03 04 38 30 36 04 0D 80 00 1F" + "88 80 E9 63 00 00 D6 1F F4 49 02 01 14 02 01 35" + "04 07 6C 65 78 6D 61 72 6B 04 0C 80 50 D9 A1 E7" + "81 B6 19 80 4F 06 C0 04 08 00 00 00 01 44 2C A3" + "B5 04 30 4B 4F 10 3B 73 E1 E4 BD 91 32 1B CB 41" + "1B A1 C1 D1 1D 2D B7 84 16 CA 41 BF B3 62 83 C4" + "29 C5 A4 BC 32 DA 2E C7 65 A5 3D 71 06 3C 5B 56" + "FB 04 A4"; MD5AuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString("testpass")); IPrivacyProvider privacy = new DESPrivacyProvider(new OctetString("passtest"), auth); GetRequestMessage request = new GetRequestMessage( VersionCode.V3, new Header( new Integer32(0x6C99), new Integer32(0xFFE3), Levels.Authentication | Levels.Privacy | Levels.Reportable), new SecurityParameters( new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")), new Integer32(0x14), new Integer32(0x35), new OctetString("lexmark"), new OctetString(ByteTool.Convert("80 50 D9 A1 E7 81 B6 19 80 4F 06 C0")), new OctetString(ByteTool.Convert("00 00 00 01 44 2C A3 B5"))), new Scope( new OctetString(ByteTool.Convert("80 00 1F 88 80 E9 63 00 00 D6 1F F4 49")), OctetString.Empty, new GetRequestPdu( 0x3A25, new List <Variable>(1) { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0")) })), privacy, null); Assert.Equal(Levels.Authentication | Levels.Privacy | Levels.Reportable, request.Header.SecurityLevel); Assert.Equal(ByteTool.Convert(bytes), request.ToBytes()); }
public void TestReportFailure2() { const string data = "30780201033010020462d4a37602020578040101020103042f302d040b800000090340f4ecf2b113020124020200a4040762696c6c696e67040c62bc133ef237922dfa8ca39a04003030040b800000090340f4ecf2b1130400a81f02049d2b5c8c0201000201003011300f060a2b060106030f01010200410105"; var bytes = ByteTool.Convert(data); const string userName = "******"; IAuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString("testing345")); IPrivacyProvider priv = new DefaultPrivacyProvider(auth); var users = new UserRegistry(); users.Add(new User(new OctetString(userName), priv)); var messages = MessageFactory.ParseMessages(bytes, users); Assert.Equal(1, messages.Count); var message = messages[0]; Assert.Equal(1, message.Variables().Count); Assert.Equal("not in time window", message.Variables()[0].Id.GetErrorMessage()); }
public void TestGetRequestV3AuthPriv() { if (!DESPrivacyProvider.IsSupported) { return; } const string bytes = "30 81 80 02 01 03 30 0F 02 02 6C 99 02 03 00 FF" + "E3 04 01 07 02 01 03 04 38 30 36 04 0D 80 00 1F" + "88 80 E9 63 00 00 D6 1F F4 49 02 01 14 02 01 35" + "04 07 6C 65 78 6D 61 72 6B 04 0C 80 50 D9 A1 E7" + "81 B6 19 80 4F 06 C0 04 08 00 00 00 01 44 2C A3" + "B5 04 30 4B 4F 10 3B 73 E1 E4 BD 91 32 1B CB 41" + "1B A1 C1 D1 1D 2D B7 84 16 CA 41 BF B3 62 83 C4" + "29 C5 A4 BC 32 DA 2E C7 65 A5 3D 71 06 3C 5B 56" + "FB 04 A4"; MD5AuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString("testpass")); var registry = new UserRegistry(); registry.Add(new OctetString("lexmark"), new DefaultPrivacyProvider(auth)); var messages = MessageFactory.ParseMessages(bytes, registry); Assert.Equal(1, messages.Count); Assert.Equal(SnmpType.Unknown, messages[0].TypeCode()); //registry.Add(new OctetString("lexmark"), // new DESPrivacyProvider( // new OctetString("veryverylonglongago"), // auth)); //Assert.Throws<SnmpException>(() => MessageFactory.ParseMessages(bytes, registry)); registry.Add(new OctetString("lexmark"), new DESPrivacyProvider(new OctetString("passtest"), auth)); messages = MessageFactory.ParseMessages(bytes, registry); Assert.Equal(1, messages.Count); GetRequestMessage get = (GetRequestMessage)messages[0]; Assert.Equal(27801, get.MessageId()); //Assert.Equal(SecurityLevel.None | SecurityLevel.Reportable, get.Level); Assert.Equal("lexmark", get.Community().ToString()); //OctetString digest = new MD5AuthenticationProvider(new OctetString("testpass")).ComputeHash(get); //Assert.Equal(digest, get.Parameters.AuthenticationParameters); }
// authPriv private static IPrivacyProvider GetPrivacy(SNMPV3AuthenticationProvider authProvider, string auth, SNMPV3PrivacyProvider privProvider, string priv) { IAuthenticationProvider authenticationProvider; if (authProvider == SNMPV3AuthenticationProvider.MD5) { authenticationProvider = new MD5AuthenticationProvider(new OctetString(auth)); } else { authenticationProvider = new SHA1AuthenticationProvider(new OctetString(auth)); } if (privProvider == SNMPV3PrivacyProvider.DES) { return(new DESPrivacyProvider(new OctetString(priv), authenticationProvider)); } return(new AESPrivacyProvider(new OctetString(priv), authenticationProvider)); }
public void TestResponseVersion3_2() { var engine = CreateEngine(); engine.Listener.ClearBindings(); var serverEndPoint = new IPEndPoint(IPAddress.Loopback, Port.NextId); engine.Listener.AddBinding(serverEndPoint); engine.Start(); try { IAuthenticationProvider auth = new MD5AuthenticationProvider(new OctetString("authenticationauthentication")); IPrivacyProvider priv = new DefaultPrivacyProvider(auth); var timeout = 3000; Discovery discovery = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu); ReportMessage report = discovery.GetResponse(timeout, serverEndPoint); var expected = Messenger.NextRequestId; GetRequestMessage request = new GetRequestMessage(VersionCode.V3, Messenger.NextMessageId, expected, new OctetString("authen"), OctetString.Empty, new List <Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0")) }, priv, Messenger.MaxMessageSize, report); ISnmpMessage reply = request.GetResponse(timeout, serverEndPoint); ISnmpPdu snmpPdu = reply.Pdu(); Assert.Equal(SnmpType.ResponsePdu, snmpPdu.TypeCode); Assert.Equal(expected, reply.RequestId()); Assert.Equal(ErrorCode.NoError, snmpPdu.ErrorStatus.ToErrorCode()); } finally { if (SnmpMessageExtension.IsRunningOnWindows) { engine.Stop(); } } }
private static SnmpEngine CreateSnmpEngine(RavenServer server, ObjectStore objectStore) { (HashSet <SnmpVersion> versions, string handlerVersion) = GetVersions(server); var membershipProvider = CreateMembershipProvider(server, versions); var handlers = new[] { new HandlerMapping(handlerVersion, "GET", new GetMessageHandler()), new HandlerMapping(handlerVersion, "GETNEXT", new GetNextMessageHandler()), new HandlerMapping(handlerVersion, "GETBULK", new GetBulkMessageHandler()) }; var messageHandlerFactory = new MessageHandlerFactory(handlers); var factory = new SnmpApplicationFactory(new SnmpLogger(Logger), objectStore, membershipProvider, messageHandlerFactory); var listener = new Listener(); if (versions.Contains(SnmpVersion.V3)) { var authenticationPassword = server.Configuration.Monitoring.Snmp.AuthenticationPassword ?? server.Configuration.Monitoring.Snmp.Community; IAuthenticationProvider authenticationProvider; switch (server.Configuration.Monitoring.Snmp.AuthenticationProtocol) { case SnmpAuthenticationProtocol.SHA1: authenticationProvider = new SHA1AuthenticationProvider(new OctetString(authenticationPassword)); break; case SnmpAuthenticationProtocol.MD5: authenticationProvider = new MD5AuthenticationProvider(new OctetString(authenticationPassword)); break; default: throw new InvalidOperationException($"Unknown authentication protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } var privacyPassword = server.Configuration.Monitoring.Snmp.PrivacyPassword; IPrivacyProvider privacyProvider; switch (server.Configuration.Monitoring.Snmp.PrivacyProtocol) { case SnmpPrivacyProtocol.None: privacyProvider = new DefaultPrivacyProvider(authenticationProvider); break; case SnmpPrivacyProtocol.DES: privacyProvider = new BouncyCastleDESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; case SnmpPrivacyProtocol.AES: privacyProvider = new BouncyCastleAESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; default: throw new InvalidOperationException($"Unknown privacy protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } listener.Users.Add(new OctetString(server.Configuration.Monitoring.Snmp.AuthenticationUser), privacyProvider); } int engineBoots; using (server.ServerStore.ContextPool.AllocateOperationContext(out TransactionOperationContext context)) using (var tx = context.OpenWriteTransaction()) { var tree = tx.InnerTransaction.CreateTree(nameof(SnmpWatcher)); engineBoots = (int)tree.Increment("EngineBoots", 1); tx.Commit(); } var engineGroup = new EngineGroup(engineBoots, GetIsInTime(server.Configuration.Monitoring)) { EngineId = new OctetString(server.ServerStore.GetServerId().ToString("N")) }; var engine = new SnmpEngine(factory, listener, engineGroup); engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, server.Configuration.Monitoring.Snmp.Port)); engine.Listener.ExceptionRaised += (sender, e) => { if (Logger.IsOperationsEnabled) { Logger.Operations("SNMP error: " + e.Exception.Message, e.Exception); } }; return(engine); }
private void GetSnmpData(string _host) { //snmpwalk -v3 -l authNoPriv -u [user] -a MD5 - A [password] [host] IPAddress hostIP; if (!IPAddress.TryParse(_host, out hostIP)) { try { hostIP = Dns.GetHostAddresses(_host)[0]; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } try { Discovery discovery = Messenger.GetNextDiscovery(SnmpType.GetRequestPdu); ReportMessage report = discovery.GetResponse(5000, new IPEndPoint(hostIP, 161)); var auth = new MD5AuthenticationProvider(new OctetString(txtPassword.Text)); var priv = new DefaultPrivacyProvider(auth); List <Variable> vList = new List <Variable>(); foreach (OidData oidData in OidList) { vList.Add(new Variable(new ObjectIdentifier(oidData.Oid))); } GetRequestMessage request = new GetRequestMessage( VersionCode.V3, Messenger.NextMessageId, Messenger.NextRequestId, new OctetString("read"), vList, priv, Messenger.MaxMessageSize, report); ISnmpMessage reply = request.GetResponse(5000, new IPEndPoint(hostIP, 161)); if (reply.Pdu().ErrorStatus.ToInt32() != 0) // != ErrorCode.NoError { throw ErrorException.Create( "error in response", hostIP, reply); } foreach (Variable v in reply.Pdu().Variables) { lbOutput.Items.Add(v); } lbOutput.Items.Add("-------------------------------"); Listbox_ScrollToBottom(); } catch (SnmpException ex) { Console.WriteLine(ex); } catch (SocketException ex) { Console.WriteLine(ex); } }
private static SnmpEngine CreateSnmpEngine(RavenServer server, ObjectStore objectStore) { (HashSet <SnmpVersion> versions, string handlerVersion) = GetVersions(server); var membershipProvider = CreateMembershipProvider(server, versions); var handlers = new[] { new HandlerMapping(handlerVersion, "GET", new GetMessageHandler()), new HandlerMapping(handlerVersion, "GETNEXT", new GetNextMessageHandler()), new HandlerMapping(handlerVersion, "GETBULK", new GetBulkMessageHandler()) }; var messageHandlerFactory = new MessageHandlerFactory(handlers); var factory = new SnmpApplicationFactory(new SnmpLogger(Logger), objectStore, membershipProvider, messageHandlerFactory); var listener = new Listener(); if (versions.Contains(SnmpVersion.V3)) { var authenticationPassword = server.Configuration.Monitoring.Snmp.AuthenticationPassword ?? server.Configuration.Monitoring.Snmp.Community; IAuthenticationProvider authenticationProvider; switch (server.Configuration.Monitoring.Snmp.AuthenticationProtocol) { case SnmpAuthenticationProtocol.SHA1: authenticationProvider = new SHA1AuthenticationProvider(new OctetString(authenticationPassword)); break; case SnmpAuthenticationProtocol.MD5: authenticationProvider = new MD5AuthenticationProvider(new OctetString(authenticationPassword)); break; default: throw new InvalidOperationException($"Unknown authentication protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } var privacyPassword = server.Configuration.Monitoring.Snmp.PrivacyPassword; IPrivacyProvider privacyProvider; switch (server.Configuration.Monitoring.Snmp.PrivacyProtocol) { case SnmpPrivacyProtocol.None: privacyProvider = new DefaultPrivacyProvider(authenticationProvider); break; case SnmpPrivacyProtocol.DES: privacyProvider = new BouncyCastleDESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; case SnmpPrivacyProtocol.AES: privacyProvider = new BouncyCastleAESPrivacyProvider(new OctetString(privacyPassword), authenticationProvider); break; default: throw new InvalidOperationException($"Unknown privacy protocol '{server.Configuration.Monitoring.Snmp.AuthenticationProtocol}'."); } listener.Users.Add(new OctetString(server.Configuration.Monitoring.Snmp.AuthenticationUser), privacyProvider); } var engineGroup = new EngineGroup(); var engineIdField = engineGroup.GetType().GetField("_engineId", BindingFlags.Instance | BindingFlags.NonPublic); engineIdField.SetValue(engineGroup, new OctetString(Guid.NewGuid().ToString("N"))); var engine = new SnmpEngine(factory, listener, engineGroup); engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, server.Configuration.Monitoring.Snmp.Port)); engine.Listener.ExceptionRaised += (sender, e) => { if (Logger.IsOperationsEnabled) { Logger.Operations("SNMP error: " + e.Exception.Message, e.Exception); } }; return(engine); }