/// <summary> /// Initializes a new instance of the <see cref="GetNextRequestMessage"/> class. /// </summary> /// <param name="version">The version.</param> /// <param name="messageId">The message id.</param> /// <param name="requestId">The request id.</param> /// <param name="userName">Name of the user.</param> /// <param name="variables">The variables.</param> /// <param name="privacy">The privacy provider.</param> /// <param name="maxMessageSize">Size of the max message.</param> /// <param name="report">The report.</param> public GetNextRequestMessage(VersionCode version, int messageId, int requestId, OctetString userName, IList <Variable> variables, IPrivacyProvider privacy, int maxMessageSize, ISnmpMessage report) { if (variables == null) { throw new ArgumentNullException("variables"); } if (userName == null) { throw new ArgumentNullException("userName"); } if (version != VersionCode.V3) { throw new ArgumentException("only v3 is supported", "version"); } if (report == null) { throw new ArgumentNullException("report"); } if (privacy == null) { throw new ArgumentNullException("privacy"); } Version = version; Privacy = privacy; Levels recordToSecurityLevel = PrivacyProviderExtension.ToSecurityLevel(privacy); recordToSecurityLevel |= Levels.Reportable; byte b = (byte)recordToSecurityLevel; // TODO: define more constants. Header = new Header(new Integer32(messageId), new Integer32(maxMessageSize), new OctetString(new[] { b }), new Integer32(3)); var parameters = report.Parameters; var authenticationProvider = Privacy.AuthenticationProvider; Parameters = new SecurityParameters( parameters.EngineId, parameters.EngineBoots, parameters.EngineTime, userName, authenticationProvider.CleanDigest, Privacy.Salt); GetNextRequestPdu pdu = new GetNextRequestPdu( requestId, ErrorCode.NoError, 0, variables); var scope = report.Scope; Scope = new Scope(scope.ContextEngineId, scope.ContextName, pdu); Parameters.AuthenticationParameters = authenticationProvider.ComputeHash(Version, Header, Parameters, Scope, Privacy); _bytes = SnmpMessageExtension.PackMessage(Version, Header, Parameters, Scope, Privacy).ToBytes(); }
public void TestToBytes3() { var privacy = new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication"))); var trap = new TrapV2Message( VersionCode.V3, new Header( new Integer32(1004947569), new Integer32(0x10000), new OctetString(new[] { (byte)PrivacyProviderExtension.ToSecurityLevel(privacy) }), new Integer32(3)), new SecurityParameters( new OctetString(ByteTool.Convert("80001F8880E9630000D61FF449")), new Integer32(0), new Integer32(0), new OctetString("lextm"), new OctetString(ByteTool.Convert("61A9A486AF4A861BD5C0BB1F")), new OctetString(ByteTool.Convert("0000000069D39B2A"))), new Scope(OctetString.Empty, OctetString.Empty, new TrapV2Pdu( 234419641, new ObjectIdentifier("1.3.6"), 0, new List <Variable>())), privacy); byte[] bytes = trap.ToBytes(); UserRegistry registry = new UserRegistry(); registry.Add(new OctetString("lextm"), privacy); IList <ISnmpMessage> messages = MessageFactory.ParseMessages(bytes, registry); Assert.AreEqual(1, messages.Count); ISnmpMessage message = messages[0]; Assert.AreEqual("80001F8880E9630000D61FF449", message.Parameters.EngineId.ToHexString()); Assert.AreEqual(0, message.Parameters.EngineBoots.ToInt32()); Assert.AreEqual(0, message.Parameters.EngineTime.ToInt32()); Assert.AreEqual("lextm", message.Parameters.UserName.ToString()); Assert.AreEqual("61A9A486AF4A861BD5C0BB1F", message.Parameters.AuthenticationParameters.ToHexString()); Assert.AreEqual("0000000069D39B2A", message.Parameters.PrivacyParameters.ToHexString()); Assert.AreEqual("", message.Scope.ContextEngineId.ToHexString()); // SNMP#NET returns string.Empty here. Assert.AreEqual("", message.Scope.ContextName.ToHexString()); Assert.AreEqual(0, message.Scope.Pdu.Variables.Count); Assert.AreEqual(1004947569, message.MessageId); Assert.AreEqual(234419641, message.RequestId); }
public List <EngineUser> MatchUsersToProvider(OctetString userName, VersionCode version, Header header, SecurityParameters parameters, ISnmpData body, byte[] length, IPrivacyProvider matchProvider) { if (userName == null) { throw new ArgumentNullException(nameof(userName)); } List <EngineUser> engineUserList = new List <EngineUser>(); for (int index = 0; index < _identifiedUsers.Count; ++index) { EngineUser engineUser = _identifiedUsers.ElementAt(index).Value; if (engineUser != null && ((object)matchProvider).GetType() == ((object)engineUser.Privacy).GetType()) { if (body.TypeCode == SnmpType.Sequence) { Scope scope1 = new Scope((Sequence)body); } else { try { Scope scope2 = new Scope((Sequence)engineUser.Privacy.Decrypt(body, parameters)); } catch (DecryptionException) { continue; } } if (PrivacyProviderExtension.VerifyHash(engineUser.Privacy, version, header, parameters, body, length)) { engineUserList.Add(engineUser); } } } return(engineUserList); }
public void TestException() { Assert.Throws <ArgumentNullException>(() => PrivacyProviderExtension.ToSecurityLevel(null)); Assert.Throws <ArgumentNullException>(() => PrivacyProviderExtension.GetScopeData(null, null, null, null)); Assert.Throws <ArgumentNullException>(() => DefaultPrivacyProvider.DefaultPair.GetScopeData(null, null, null)); }
public TrapV2Message(VersionCode version, int messageId, int requestId, OctetString userName, ObjectIdentifier enterprise, uint time, IList <Variable> variables, IPrivacyProvider privacy, int maxMessageSize, OctetString engineId, int engineBoots, int engineTime) { if (userName == null) { throw new ArgumentNullException("userName"); } if (variables == null) { throw new ArgumentNullException("variables"); } if (version != VersionCode.V3) { throw new ArgumentException("only v3 is supported", "version"); } if (enterprise == null) { throw new ArgumentNullException("enterprise"); } if (engineId == null) { throw new ArgumentNullException("engineId"); } if (privacy == null) { throw new ArgumentNullException("privacy"); } Version = version; Privacy = privacy; Enterprise = enterprise; TimeStamp = time; Levels recordToSecurityLevel = PrivacyProviderExtension.ToSecurityLevel(privacy); byte b = (byte)recordToSecurityLevel; // TODO: define more constants. Header = new Header(new Integer32(messageId), new Integer32(maxMessageSize), new OctetString(new[] { b }), new Integer32(3)); var authenticationProvider = Privacy.AuthenticationProvider; Parameters = new SecurityParameters( engineId, new Integer32(engineBoots), new Integer32(engineTime), userName, authenticationProvider.CleanDigest, Privacy.Salt); var pdu = new TrapV2Pdu( requestId, enterprise, time, variables); Scope = new Scope(OctetString.Empty, OctetString.Empty, pdu); Parameters.AuthenticationParameters = authenticationProvider.ComputeHash(Version, Header, Parameters, Scope, Privacy); _bytes = SnmpMessageExtension.PackMessage(Version, Header, Parameters, Scope, Privacy).ToBytes(); }
public void TestException() { Assert.Throws <ArgumentNullException>(() => PrivacyProviderExtension.ToSecurityLevel(null)); }
public void TestAuthenticationOnly() { Assert.AreEqual(Levels.Authentication, PrivacyProviderExtension.ToSecurityLevel(new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("test"))))); }
public void TestToSecurityLevel() { Assert.AreEqual((Levels)0, PrivacyProviderExtension.ToSecurityLevel(DefaultPrivacyProvider.DefaultPair)); }