Beispiel #1
0
        /// <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();
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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();
        }
Beispiel #6
0
 public void TestException()
 {
     Assert.Throws <ArgumentNullException>(() => PrivacyProviderExtension.ToSecurityLevel(null));
 }
Beispiel #7
0
 public void TestAuthenticationOnly()
 {
     Assert.AreEqual(Levels.Authentication, PrivacyProviderExtension.ToSecurityLevel(new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("test")))));
 }
Beispiel #8
0
 public void TestToSecurityLevel()
 {
     Assert.AreEqual((Levels)0, PrivacyProviderExtension.ToSecurityLevel(DefaultPrivacyProvider.DefaultPair));
 }