/// <summary>
 /// Initializes a new instance of the <see cref="IfPhysAddress"/> class.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <param name="networkInterface">The network interface.</param>
 public IfPhysAddress(int index, NetworkInterface networkInterface)
     : base("1.3.6.1.2.1.2.2.1.6.{0}", index)
 {
     _data = new OctetString(networkInterface.GetPhysicalAddress().GetAddressBytes());
 }
        internal static Sequence PackMessage(VersionCode version, ISegment header, ISegment parameters, ISnmpData scopeBytes, IPrivacyProvider privacy)
        {
            if (scopeBytes == null)
            {
                throw new ArgumentNullException("scopeBytes");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (header == null)
            {
                throw new ArgumentNullException("header");
            }

            if (privacy == null)
            {
                throw new ArgumentNullException("privacy");
            }

            ISnmpData[] collection = new ISnmpData[4]
                                             {
                                                 new Integer32((int)version),
                                                 header.GetData(version),
                                                 parameters.GetData(version),
                                                 scopeBytes,
                                             };
            return new Sequence(collection);
        }
        public void TestTrapv1Pdu()
        {
            byte[] expected = new byte[] { 0xA4, 0x37,
                                           0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x90, 0x72, 0x87, 0x68, 0x02,
                                           0x40, 0x04, 0x7F, 0x00, 0x00, 0x01,
                                           0x02, 0x01, 0x06,
                                           0x02, 0x01, 0x0C,
                                           0x43, 0x02, 0x3F, 0xE0,
                                           0x30, 0x19,
                                           0x30, 0x17,
                                           0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x90, 0x72, 0x87, 0x69, 0x15, 0x00,
                                           0x04, 0x08, 0x54, 0x72, 0x61, 0x70, 0x54, 0x65, 0x73, 0x74 };
            ISnmpData data = DataFactory.CreateSnmpData(expected);

            Assert.AreEqual(SnmpType.TrapV1Pdu, data.TypeCode);

            TrapV1Pdu t = (TrapV1Pdu)data;

            Assert.AreEqual(new uint[] { 1, 3, 6, 1, 4, 1, 2162, 1000, 2 }, t.Enterprise.ToNumerical());
            Assert.AreEqual("127.0.0.1", t.AgentAddress.ToIPAddress().ToString());
            Assert.AreEqual(GenericCode.EnterpriseSpecific, t.Generic);
            Assert.AreEqual(12, t.Specific);
            Assert.AreEqual(16352, t.TimeStamp.ToUInt32());
            Assert.AreEqual(1, t.Variables.Count);
        }
Exemple #4
0
        public void TestEncrypt2()
        {
            if (!AESPrivacyProviderBase.IsSupported)
            {
                return;
            }

            byte[] expected =
                ByteTool.Convert(
                    "04 30 9D 13 04 9C 7E D9 84 8B 33 C3 26 5C 1F 91 30 27 D3 56 B0 FD 81 36 50 3A EF 80 1C B9 25 D6 38 84 A7 07 45 FE E8 D7 01 83 A1 CE 04 79 9D 5F 9E 2F");
            OctetString        engineId = new OctetString(ByteTool.Convert("80 00 1F 88 80  E9 63 00 00  D6 1F F4 49"));
            AESPrivacyProvider priv     = new AESPrivacyProvider(new OctetString("passtest"),
                                                                 new MD5AuthenticationProvider(new OctetString("testpass")));
            Scope scope = new Scope(engineId, OctetString.Empty,
                                    new GetRequestPdu(0x3A25,
                                                      new List <Variable> {
                new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0"))
            }));
            SecurityParameters parameters = new SecurityParameters(engineId, new Integer32(0x14), new Integer32(0x35),
                                                                   new OctetString("lexmark"), new OctetString(new byte[12]),
                                                                   new OctetString(ByteTool.Convert("00 00 00  01 44 2C A3 B5")));
            var       original = scope.GetData(VersionCode.V3);
            ISnmpData data     = priv.Encrypt(original, parameters);

            Assert.Equal(SnmpType.OctetString, data.TypeCode);
            Assert.Equal(ByteTool.Convert(expected), ByteTool.Convert(data.ToBytes()));

            ISnmpData decrypted = priv.Decrypt(data, parameters);

            Assert.Equal(ByteTool.Convert(original.ToBytes()), ByteTool.Convert(decrypted.ToBytes()));
        }
        public void TestToBytes()
        {
            List <Variable> vList = new List <Variable>
            {
                new Variable(
                    new ObjectIdentifier(new uint[] { 1, 3, 6, 1, 4, 1, 2162, 1001, 21, 0 }),
                    new OctetString("TrapTest"))
            };

            Sequence a = Variable.Transform(vList);

            Assert.Throws <ArgumentNullException>(() => a.AppendBytesTo(null));
            Assert.Equal("SNMP SEQUENCE: SNMP SEQUENCE: 1.3.6.1.4.1.2162.1001.21.0; TrapTest; ; ", a.ToString());
            byte[]    bytes = a.ToBytes();
            ISnmpData data  = DataFactory.CreateSnmpData(bytes);

            Assert.Equal(SnmpType.Sequence, data.TypeCode);
            Sequence array = (Sequence)data;

            Assert.Equal(1, array.Length);
            ISnmpData item = array[0];

            Assert.Equal(SnmpType.Sequence, item.TypeCode);
            Sequence v = (Sequence)item;

            Assert.Equal(2, v.Length);
            Assert.Equal(SnmpType.ObjectIdentifier, v[0].TypeCode);
            ObjectIdentifier o = (ObjectIdentifier)v[0];

            Assert.Equal(new uint[] { 1, 3, 6, 1, 4, 1, 2162, 1001, 21, 0 }, o.ToNumerical());
            Assert.Equal(SnmpType.OctetString, v[1].TypeCode);
            Assert.Equal("TrapTest", v[1].ToString());
        }
Exemple #6
0
        /// <summary>
        /// Encrypts the specified scope.
        /// </summary>
        /// <param name="data">The scope data.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public ISnmpData Encrypt(ISnmpData data, SecurityParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            var pkey     = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());
            var bytes    = data.ToBytes();
            var reminder = bytes.Length % 8;
            var count    = reminder == 0 ? 0 : 8 - reminder;

            using (var stream = new MemoryStream())
            {
                stream.Write(bytes, 0, bytes.Length);
                for (var i = 0; i < count; i++)
                {
                    stream.WriteByte(1);
                }

                bytes = stream.ToArray();
            }

            var encrypted = Encrypt(bytes, pkey, parameters.EngineBoots.ToInt32(), parameters.EngineTime.ToInt32(), parameters.PrivacyParameters.GetRaw());

            return(new OctetString(encrypted));
        }
Exemple #7
0
        /// <summary>
        /// Decrypts the specified data.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public ISnmpData Decrypt(ISnmpData data, SecurityParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            if (data.TypeCode != SnmpType.OctetString)
            {
                throw new SnmpException("cannot decrypt the scope data");
            }

            var octets = (OctetString)data;
            var bytes  = octets.GetRaw();
            var pkey   = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());

            // decode encrypted packet
            var decrypted = Decrypt(bytes, pkey, parameters.EngineBoots.ToInt32(), parameters.EngineTime.ToInt32(), parameters.PrivacyParameters.GetRaw());

            return(DataFactory.CreateSnmpData(decrypted));
        }
        public void TestDiscoveryResponse()
        {
            const string bytes = "30 66 02 01  03 30 0F 02  02 6A 09 02  03 00 FF E3" +
                                 "04 01 00 02  01 03 04 1E  30 1C 04 0D  80 00 1F 88" +
                                 "80 E9 63 00  00 D6 1F F4  49 02 01 05  02 02 0F 1B" +
                                 "04 00 04 00  04 00 30 30  04 0D 80 00  1F 88 80 E9" +
                                 "63 00 00 D6  1F F4 49 04  00 A8 1D 02  02 2C 6B 02" +
                                 "01 00 02 01  00 30 11 30  0F 06 0A 2B  06 01 06 03" +
                                 "0F 01 01 04  00 41 01 03";
            IList <ISnmpMessage> messages = MessageFactory.ParseMessages(bytes, new UserRegistry());

            Assert.Equal(1, messages.Count);
            Assert.Equal(5, messages[0].Parameters.EngineBoots.ToInt32());
            Assert.Equal("80001F8880E9630000D61FF449", messages[0].Parameters.EngineId.ToHexString());
            Assert.Equal(3867, messages[0].Parameters.EngineTime.ToInt32());
            Assert.Equal(ErrorCode.NoError, messages[0].Pdu().ErrorStatus.ToErrorCode());
            Assert.Equal(1, messages[0].Pdu().Variables.Count);

            Variable v = messages[0].Pdu().Variables[0];

            Assert.Equal("1.3.6.1.6.3.15.1.1.4.0", v.Id.ToString());
            ISnmpData data = v.Data;

            Assert.Equal(SnmpType.Counter32, data.TypeCode);
            Assert.Equal(3U, ((Counter32)data).ToUInt32());

            Assert.Equal("80001F8880E9630000D61FF449", messages[0].Scope.ContextEngineId.ToHexString());
            Assert.Equal("", messages[0].Scope.ContextName.ToHexString());
        }
Exemple #9
0
        //--------------------------------------------------------------------
        public void SendTrapUnsafe(string strReceiverIP, int nReceiverPort)
        {
            IPEndPoint      endPoint     = new IPEndPoint(IPAddress.Parse(strReceiverIP), nReceiverPort);
            List <Variable> lstVariables = new List <Variable>();

            foreach (KeyValuePair <ObjectIdentifier, object> kv in m_dicValeursVariables)
            {
                ISnmpData data = null;
                if (kv.Value is ISnmpData)
                {
                    data = (ISnmpData)kv.Value;
                }
                else
                {
                    data = AbstractTypeAssignment.GetSnmpFromDotNet(kv.Value);
                }
                if (data != null)
                {
                    lstVariables.Add(new Variable(kv.Key, data));
                }
            }

            Messaging.Messenger.SendTrapV1(endPoint,
                                           IpAgent,
                                           new OctetString(m_strCommunaute),
                                           EntrepriseOID,
                                           GenericCode,
                                           SpecificCode,
                                           0,
                                           lstVariables);
        }
        public void TestEncrypt2()
        {
            byte[] expected = ByteTool.Convert("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");
            OctetString      engineId = new OctetString(ByteTool.Convert("80 00 1F 88 80  E9 63 00 00  D6 1F F4 49"));
            IPrivacyProvider priv;

            if (DESPrivacyProvider.IsSupported)
            {
                priv = new DESPrivacyProvider(new OctetString("passtest"), new MD5AuthenticationProvider(new OctetString("testpass")));
            }
            else
            {
                return;
            }

            Scope scope = new Scope(engineId, OctetString.Empty, new GetRequestPdu(0x3A25, new List <Variable> {
                new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.3.0"))
            }));
            SecurityParameters parameters = new SecurityParameters(engineId, new Integer32(0x14), new Integer32(0x35), new OctetString("lexmark"), new OctetString(new byte[12]), new OctetString(ByteTool.Convert("00 00 00  01 44 2C A3 B5")));
            ISnmpData          data       = priv.Encrypt(scope.GetData(VersionCode.V3), parameters);

            Assert.Equal(SnmpType.OctetString, data.TypeCode);
            Assert.Equal(ByteTool.Convert(expected), ByteTool.Convert(data.ToBytes()));
        }
Exemple #11
0
        //-------------------------------------------------------------------------------
        //Optimisation : l'entité pour sup n'est créée qu'une seul fois lors d'appels multiples
        public CResultAErreur ReadChampSnmp(int nIdChampCustom, CInterrogateurSnmp dynamicAgent, ref CEntiteSnmpPourSupervision ettPourSup)
        {
            CResultAErreur result = CResultAErreur.True;

            CResultAErreurType <string> resOID = GetFieldOIDWithEntitePourSupervision(nIdChampCustom, ettPourSup);

            if (!resOID)
            {
                result.EmpileErreur(resOID.Erreur);
                return(result);
            }

            string    strOID = resOID.DataType;
            ISnmpData valeur = dynamicAgent.Get(strOID) as ISnmpData;
            CRelationEntiteSnmp_ChampCustom relChamp = CUtilElementAChamps.GetRelationToChamp(this, nIdChampCustom) as CRelationEntiteSnmp_ChampCustom;

            if (relChamp != null)
            {
                if (valeur == null)
                {
                    relChamp.LastSnmpValue = null;
                }
                else
                {
                    relChamp.LastSnmpValue = valeur.ConvertToTypeDotNet();
                }
            }
            result.Data = valeur != null?valeur.ConvertToTypeDotNet() : null;

            return(result);
        }
Exemple #12
0
        public static void SetValueAsync(IPEndPoint ep, string oid, ISnmpData data, Action <ISnmpData> handler, int timeout)
        {
            ThreadPool.QueueUserWorkItem(delegate
            {
                List <Variable> vList = new List <Variable> {
                    new Variable(new ObjectIdentifier(oid), data)
                };

                try
                {
                    IList <Variable> value = Messenger.Set(VersionCode.V2, ep, new OctetString("private"), vList, timeout);
                    if ((value.Count == 1) && (value[0].Data.TypeCode != SnmpType.NoSuchInstance))
                    {
                        _context.Post(delegate
                        {
                            if (!_closed)
                            {
                                handler(value[0].Data);
                            }
                        }, "SnmpAgent.ValueSetted");
                    }
                }
                catch (Exception)
                {
                }
            });
        }
Exemple #13
0
        public void TestCreateOctetString()
        {
            byte[]    expected = new byte[] { 0x04, 0x06, 0x70, 0x75, 0x62, 0x6C, 0x69, 0x63 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.OctetString, data.TypeCode);
            Assert.Equal("public", data.ToString());
        }
Exemple #14
0
        /// <summary>
        /// Расшифровать данные переменной SNMP
        /// </summary>
        private SrezTable.CnlData DecodeVarData(ISnmpData data)
        {
            if (data == null)
            {
                return(SrezTable.CnlData.Empty);
            }
            else
            {
                try
                {
                    switch (data.TypeCode)
                    {
                    case SnmpType.Integer32:
                        return(new SrezTable.CnlData(((Integer32)data).ToInt32(), 1));

                    case SnmpType.Counter32:
                        return(new SrezTable.CnlData(((Counter32)data).ToUInt32(), 1));

                    case SnmpType.Counter64:
                        return(new SrezTable.CnlData(((Counter64)data).ToUInt64(), 1));

                    case SnmpType.TimeTicks:
                        return(new SrezTable.CnlData(((TimeTicks)data).ToUInt32(), 1));

                    case SnmpType.OctetString:
                        string s = data.ToString().Trim();
                        double val;
                        if (s.Equals("true", StringComparison.OrdinalIgnoreCase))
                        {
                            return(new SrezTable.CnlData(1.0, 1));
                        }
                        else if (s.Equals("false", StringComparison.OrdinalIgnoreCase))
                        {
                            return(new SrezTable.CnlData(0.0, 1));
                        }
                        else if (double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out val))
                        {
                            return(new SrezTable.CnlData(val, 1));
                        }
                        else
                        {
                            return(SrezTable.CnlData.Empty);
                        }

                    default:
                        return(SrezTable.CnlData.Empty);
                    }
                }
                catch (Exception ex)
                {
                    WriteToLog(string.Format(Localization.UseRussian ?
                                             "Ошибка при расшифровке данных \"{0}\" типа {1}: {2}" :
                                             "Error decoding data \"{0}\" of type {1}: {2}",
                                             data.ToString(), data.TypeCode.ToString(), ex.Message));
                    return(SrezTable.CnlData.Empty);
                }
            }
        }
Exemple #15
0
        public void TestCreateNull()
        {
            byte[]    expected = new byte[] { 0x05, 0x00 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.Null, data.TypeCode);
            Null n = (Null)data;

            Assert.Equal(expected, n.ToBytes());
        }
Exemple #16
0
        public void TestCreateIP()
        {
            byte[]    expected = new byte[] { 0x40, 0x04, 0x7F, 0x00, 0x00, 0x01 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.IPAddress, data.TypeCode);
            IP a = (IP)data;

            Assert.Equal("127.0.0.1", a.ToString());
        }
Exemple #17
0
        public void TestCreateObjectIdentifier()
        {
            byte[]    expected = new byte[] { 0x06, 0x0A, 0x2B, 0x06, 0x01, 0x04, 0x01, 0x90, 0x72, 0x87, 0x68, 0x02 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.ObjectIdentifier, data.TypeCode);
            ObjectIdentifier o = (ObjectIdentifier)data;

            Assert.Equal(new uint[] { 1, 3, 6, 1, 4, 1, 2162, 1000, 2 }, o.ToNumerical());
        }
Exemple #18
0
        public void TestCreateInteger()
        {
            byte[]    expected = new byte[] { 0x02, 0x01, 0x00 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.Integer32, data.TypeCode);
            Integer32 i = (Integer32)data;

            Assert.Equal(0, i.ToInt32());
        }
Exemple #19
0
        public void TestTimeticks()
        {
            byte[]    expected = new byte[] { 0x43, 0x02, 0x3F, 0xE0 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.TimeTicks, data.TypeCode);
            TimeTicks t = (TimeTicks)data;

            Assert.Equal(16352U, t.ToUInt32());
        }
        public void TestToBytes()
        {
            TimeTicks time = new TimeTicks(16352);
            ISnmpData data = DataFactory.CreateSnmpData(time.ToBytes());

            Assert.AreEqual(data.TypeCode, SnmpType.TimeTicks);
            Assert.AreEqual(16352, ((TimeTicks)data).ToUInt32());

            Assert.AreEqual(new byte[] { 0x43, 0x05, 0x00, 0x93, 0xA3, 0x41, 0x4B }, new TimeTicks(2476949835).ToBytes());
        }
Exemple #21
0
        /// <summary>
        /// Creates a <see cref="Variable"/> instance with a specific object identifier and data.
        /// </summary>
        /// <param name="id">Object identifier</param>
        /// <param name="data">Data</param>
        /// <remarks>If you set <c>null</c> to <paramref name="data"/>, you get a <see cref="Variable"/> instance whose <see cref="Data"/> is a <see cref="Null"/> instance.</remarks>
        public Variable(ObjectIdentifier id, ISnmpData data)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }

            Id = id;
            Data = data ?? new Null();
        }
Exemple #22
0
        /// <summary>
        /// Creates a <see cref="Variable"/> instance with a specific object identifier and data.
        /// </summary>
        /// <param name="id">Object identifier</param>
        /// <param name="data">Data</param>
        /// <remarks>If you set <c>null</c> to <paramref name="data"/>, you get a <see cref="Variable"/> instance whose <see cref="Data"/> is a <see cref="Null"/> instance.</remarks>
        public Variable(ObjectIdentifier id, ISnmpData data)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }

            Id   = id;
            Data = data ?? new Null();
        }
Exemple #23
0
        public void TestCreateObjectIdentifier2()
        {
            byte[]    expected = new Byte[] { 0x06, 0x01, 0x00 };
            ISnmpData data     = DataFactory.CreateSnmpData(expected);

            Assert.Equal(SnmpType.ObjectIdentifier, data.TypeCode);
            ObjectIdentifier o = (ObjectIdentifier)data;

            Assert.Equal(new uint[] { 0, 0 }, o.ToNumerical());
        }
Exemple #24
0
        protected string ConvertVariableData(ISnmpData data)
        {
            if (!(data is OctetString s))
            {
                return(data.ToString());
            }

            var count = System.Text.Encoding.ASCII.GetByteCount(s.ToString());

            return(count == 6 ? s.ToHexString() : data.ToString());
        }
Exemple #25
0
        public static void Trap(ObjectIdentifier oid, ISnmpData data, params IPEndPoint[] eps)
        {
            List <Variable> vList = new List <Variable> {
                new Variable(oid, data)
            };

            foreach (IPEndPoint ep in eps)
            {
                Messenger.SendTrapV2(0, VersionCode.V2, ep, new OctetString("private"), new ObjectIdentifier(Settings.Default.BaseOid), 0, vList);
            }
        }
Exemple #26
0
        /// <summary>
        /// Check whether data is integer
        /// </summary>
        /// <param name="snmpData"></param>
        /// <returns></returns>
        int CheckVariableDataForInt(ISnmpData snmpData)
        {
            string snmpStirng = snmpData.ToString();
            int    res        = 0;

            if (snmpStirng != "NoSuchInstance")
            {
                res = Convert.ToInt32(snmpStirng);
            }
            return(res);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MalformedMessage"/> class.
        /// </summary>
        /// <param name="messageId">The message id.</param>
        /// <param name="user">The user.</param>
        /// <param name="data">The data encrypted.</param>
        public MalformedMessage(int messageId, OctetString user, ISnmpData data)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            Header         = new Header(messageId);
            Parameters     = SecurityParameters.Create(user);
            Scope          = DefaultScope;
            EncryptedScope = data;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MalformedMessage"/> class.
        /// </summary>
        /// <param name="messageId">The message id.</param>
        /// <param name="user">The user.</param>
        /// <param name="data">The data encrypted.</param>
        public MalformedMessage(int messageId, OctetString user, ISnmpData data)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }

            Header = new Header(messageId);
            Parameters = SecurityParameters.Create(user);
            Scope = DefaultScope;
            EncryptedScope = data;
        }
Exemple #29
0
        /// <summary>
        /// Converts to byte format.
        /// </summary>
        /// <returns></returns>
        public static byte[] ToBytes(this ISnmpData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            using (var result = new MemoryStream())
            {
                data.AppendBytesTo(result);
                return(result.ToArray());
            }
        }
Exemple #30
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Header"/> class.
        /// </summary>
        /// <param name="data">The data.</param>
        public Header(ISnmpData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            Sequence container = (Sequence)data;
            _messageId = (Integer32)container[0];
            _maxSize = (Integer32)container[1];
            _flags = (OctetString)container[2];
            _securityModel = (Integer32)container[3];
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="IfMtu"/> class.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <param name="networkInterface">The network interface.</param>
 public IfMtu(int index, NetworkInterface networkInterface)
     : base("1.3.6.1.2.1.2.2.1.4.{0}", index)
 {
     if (networkInterface.Supports(NetworkInterfaceComponent.IPv4))
     {
         var pv4InterfaceProperties = networkInterface.GetIPProperties().GetIPv4Properties();
         _data = new Integer32(pv4InterfaceProperties == null ? -1 : pv4InterfaceProperties.Mtu);
     }
     else
     {
         _data = new Integer32(networkInterface.GetIPProperties().GetIPv6Properties().Mtu);
     }
 }
Exemple #32
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IfMtu"/> class.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <param name="networkInterface">The network interface.</param>
 public IfMtu(int index, NetworkInterface networkInterface)
     : base("1.3.6.1.2.1.2.2.1.4.{0}", index)
 {
     if (networkInterface.Supports(NetworkInterfaceComponent.IPv4))
     {
         var pv4InterfaceProperties = networkInterface.GetIPProperties().GetIPv4Properties();
         _data = new Integer32(pv4InterfaceProperties == null ? -1 : pv4InterfaceProperties.Mtu);
     }
     else
     {
         _data = new Integer32(networkInterface.GetIPProperties().GetIPv6Properties().Mtu);
     }
 }
        /// <summary>
        /// Converts to byte format.
        /// </summary>
        /// <returns></returns>
        public static byte[] ToBytes(ISnmpData data)
        {
            // TODO: convert to extension method in the future.
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            using (MemoryStream result = new MemoryStream())
            {
                data.AppendBytesTo(result);
                return(result.ToArray());
            }
        }
Exemple #34
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Header"/> class.
        /// </summary>
        /// <param name="data">The data.</param>
        public Header(ISnmpData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            _container     = (Sequence)data;
            _messageId     = (Integer32)_container[0];
            _maxSize       = (Integer32)_container[1];
            _flags         = (OctetString)_container[2];
            SecurityLevel  = _flags.ToLevels();
            _securityModel = (Integer32)_container[3];
        }
Exemple #35
0
 /// <summary>
 /// Преобразовать данные переменной SNMP в строку для вывода в журнал
 /// </summary>
 private string ConvertVarDataToString(ISnmpData data)
 {
     if (data == null)
     {
         return("null");
     }
     else
     {
         return(new StringBuilder(data.ToString())
                .Append(" (")
                .Append(data.TypeCode.ToString())
                .Append(")").ToString());
     }
 }
Exemple #36
0
 public void PduSetReceived_handler(string oid, ISnmpData data)
 {
     if (QueryOid.Contains(oid))
     {
         /** Tengo que escribir en Properties.Settings.Default.OidRespuesta la Oid Base (fila)
          * de la tabla correspondiente al equipo */
         string oid_equipo = equipments.OidEquipo(data.ToString());
         SnmpStringObject.Get(AnswerOid).Value = oid_equipo;
     }
     else
     {
         /** Tengo que avisar que hay cambios... */
         NotifyExternalChange?.Invoke(equipments.EquipmentName(oid));
     }
 }
        internal static ISnmpData GetScopeData(this IPrivacyProvider privacy, Header header, SecurityParameters parameters, ISnmpData rawScopeData)
        {
            if (privacy == null)
            {
                throw new ArgumentNullException("privacy");
            }

            if (header == null)
            {
                throw new ArgumentNullException("header");
            }

            return Levels.Privacy == (header.SecurityLevel & Levels.Privacy)
                       ? privacy.Encrypt(rawScopeData, parameters)
                       : rawScopeData;
        }
 /// <summary>
 /// Encrypts the specified scope.
 /// </summary>
 /// <param name="data">The scope data.</param>
 /// <param name="parameters">The parameters.</param>
 /// <returns></returns>
 public ISnmpData Encrypt(ISnmpData data, SecurityParameters parameters)
 {
     if (parameters == null)
     {
         throw new ArgumentNullException("parameters");
     }
     
     if (data == null)
     {
         throw new ArgumentNullException("data");
     }
     
     if (data.TypeCode == SnmpType.Sequence || data is ISnmpPdu)
     {
         return data;
     }
     
     throw new ArgumentException("unencrypted data is expected.", "data");
 }
 /// <summary>
 /// Decrypts the specified data.
 /// </summary>
 /// <param name="data">The data.</param>
 /// <param name="parameters">The parameters.</param>
 /// <returns></returns>
 public ISnmpData Decrypt(ISnmpData data, SecurityParameters parameters)
 {
     if (data == null)
     {
         throw new ArgumentNullException("data");
     }
     
     if (parameters == null)
     {
         throw new ArgumentNullException("parameters");
     }            
     
     if (data.TypeCode != SnmpType.Sequence)
     {
         var newException = new DecryptionException("Default decryption failed");
         throw newException;
     }
     
     return data;
 }
        /// <summary>
        /// Computes the hash.
        /// </summary>
        /// <param name="version">The version.</param>
        /// <param name="header">The header.</param>
        /// <param name="parameters">The parameters.</param>
        /// <param name="data">The scope data.</param>
        /// <param name="privacy">The privacy provider.</param>
        /// <param name="length">The length bytes.</param>
        /// <returns></returns>
        public OctetString ComputeHash(VersionCode version, ISegment header, SecurityParameters parameters, ISnmpData data, IPrivacyProvider privacy, byte[] length)
        {
            if (header == null)
            {
                throw new ArgumentNullException("header");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            if (privacy == null)
            {
                throw new ArgumentNullException("privacy");
            }

            return OctetString.Empty;
        }
Exemple #41
0
 public Variable(uint[] id, ISnmpData data) : this(new ObjectIdentifier(id), data) 
 { 
 }
        /// <summary>
        /// Computes the hash.
        /// </summary>
        /// <param name="version">The version.</param>
        /// <param name="header">The header.</param>
        /// <param name="parameters">The parameters.</param>
        /// <param name="data">The scope data.</param>
        /// <param name="privacy">The privacy provider.</param>
        /// <param name="length">The length bytes.</param>
        /// <returns></returns>
        public OctetString ComputeHash(VersionCode version, ISegment header, SecurityParameters parameters, ISnmpData data, IPrivacyProvider privacy, byte[] length)
        {
            if (header == null)
            {
                throw new ArgumentNullException("header");
            }
            
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            
            if (privacy == null)
            {
                throw new ArgumentNullException("privacy");
            }

            var key = PasswordToKey(_password, parameters.EngineId.GetRaw());
            using (var md5 = new HMACMD5(key))
            {
                var hash = md5.ComputeHash(ByteTool.PackMessage(length, version, header, parameters, data).ToBytes());
                md5.Clear();
                var result = new byte[DigestLength];
                Buffer.BlockCopy(hash, 0, result, 0, result.Length);
                return new OctetString(result);
            }
        }
Exemple #43
0
 public void AssignData(ISnmpData val)
 {
     _data = (OctetString) val;
 }
Exemple #44
0
        /// <summary>
        /// Encrypts the specified scope.
        /// </summary>
        /// <param name="data">The scope data.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public ISnmpData Encrypt(ISnmpData data, SecurityParameters parameters)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            
            if (data.TypeCode != SnmpType.Sequence && !(data is ISnmpPdu))
            {
                throw new ArgumentException("unencrypted data is expected.", "data");
            }        
            
            var pkey = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());
            var bytes = data.ToBytes();
            var reminder = bytes.Length % 8;
            var count = reminder == 0 ? 0 : 8 - reminder;
            using (var stream = new MemoryStream())
            {
                stream.Write(bytes, 0, bytes.Length);
                for (var i = 0; i < count; i++)
                {
                    stream.WriteByte(1);
                }

                bytes = stream.ToArray();
            }
            
            var encrypted = Encrypt(bytes, pkey, parameters.PrivacyParameters.GetRaw());
            return new OctetString(encrypted);
        }
        /// <summary>
        /// Verifies the hash.
        /// </summary>
        /// <param name="provider">The authentication provider.</param>
        /// <param name="version">The version.</param>
        /// <param name="header">The header.</param>
        /// <param name="parameters">The parameters.</param>
        /// <param name="scopeBytes">The scope bytes.</param>
        /// <param name="privacy">The privacy provider.</param>
        /// <param name="length">The length bytes.</param>
        /// <returns>
        /// Returns <c>true</c> if hash matches. Otherwise, returns <c>false</c>.
        /// </returns>
        public static bool VerifyHash(this IAuthenticationProvider provider, VersionCode version, Header header, SecurityParameters parameters, ISnmpData scopeBytes, IPrivacyProvider privacy, byte[] length)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }
            
            if (header == null)
            {
                throw new ArgumentNullException("header");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (scopeBytes == null)
            {
                throw new ArgumentNullException("scopeBytes");
            }

            if (privacy == null)
            {
                throw new ArgumentNullException("privacy");
            }

            if (provider is DefaultAuthenticationProvider)
            {
                return true;
            }

            if (0 == (header.SecurityLevel & Levels.Authentication))
            {
                return true;
            }

            var expected = parameters.AuthenticationParameters;
            parameters.AuthenticationParameters = provider.CleanDigest; // clean the hash first.
            var newHash = provider.ComputeHash(version, header, parameters, scopeBytes, privacy, length);
            parameters.AuthenticationParameters = expected; // restore the hash.
            return newHash == expected;
        }
 /// <summary>
 /// Decrypts the specified data.
 /// </summary>
 /// <param name="data">The data.</param>
 /// <param name="parameters">The parameters.</param>
 /// <returns></returns>
 public ISnmpData Decrypt(ISnmpData data, SecurityParameters parameters)
 {
     return data;
 }
Exemple #47
0
        /// <summary>
        /// Decrypts the specified data.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public ISnmpData Decrypt(ISnmpData data, SecurityParameters parameters)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            
            var code = data.TypeCode;
            if (code != SnmpType.OctetString)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "cannot decrypt the scope data: {0}", code), "data");
            }
            
            var octets = (OctetString)data;
            var bytes = octets.GetRaw();
            var pkey = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());
            
            try
            {
                // decode encrypted packet
                var decrypted = Decrypt(bytes, pkey, parameters.PrivacyParameters.GetRaw());            
                var result = DataFactory.CreateSnmpData(decrypted);
                if (result.TypeCode != SnmpType.Sequence)
                {
                    var newException = new DecryptionException("DES decryption failed");
                    newException.SetBytes(bytes);
                    throw newException;
                }
                
                return result;
            }
            catch (Exception ex)
            {
                var newException = new DecryptionException("DES decryption failed", ex);
                newException.SetBytes(bytes);
                throw newException;
            }
        }
		/// <summary>
		/// Verifies the hash.
		/// </summary>
		/// <param name="version">The version.</param>
		/// <param name="header">The header.</param>
		/// <param name="parameters">The parameters.</param>
		/// <param name="scopeBytes">The scope bytes.</param>
		/// <param name="privacy">The privacy provider.</param>
		/// <returns>
		/// Returns <code>true</code> if hash matches. Otherwise, returns <code>false</code>.
		/// </returns>
		public bool VerifyHash(VersionCode version, Header header, SecurityParameters parameters, ISnmpData scopeBytes, IPrivacyProvider privacy)
		{
			if (header == null)
			{
				throw new ArgumentNullException("header");
			}

			if (parameters == null)
			{
				throw new ArgumentNullException("parameters");
			}
			
			if (scopeBytes == null)
			{
				throw new ArgumentNullException("scopeBytes");
			}
			
			if (privacy == null)
			{
				throw new ArgumentNullException("privacy");
			} 
			
			var expected = parameters.AuthenticationParameters;
			parameters.AuthenticationParameters = CleanDigest;
			bool result = ComputeHash(version, header, parameters, scopeBytes, privacy) == expected;
			parameters.AuthenticationParameters = expected;
			return result;
		}
Exemple #49
0
 /// <summary>
 /// Расшифровать данные переменной SNMP
 /// </summary>
 private SrezTable.CnlData DecodeVarData(ISnmpData data)
 {
     if (data == null)
     {
         return SrezTable.CnlData.Empty;
     }
     else
     {
         try
         {
             switch (data.TypeCode)
             {
                 case SnmpType.Integer32:
                     return new SrezTable.CnlData(((Integer32)data).ToInt32(), 1);
                 case SnmpType.Counter32:
                     return new SrezTable.CnlData(((Counter32)data).ToUInt32(), 1);
                 case SnmpType.Counter64:
                     return new SrezTable.CnlData(((Counter64)data).ToUInt64(), 1);
                 case SnmpType.TimeTicks:
                     return new SrezTable.CnlData(((TimeTicks)data).ToUInt32(), 1);
                 case SnmpType.OctetString:
                     string s = data.ToString().Trim();
                     double val;
                     if (s.Equals("true", StringComparison.OrdinalIgnoreCase))
                         return new SrezTable.CnlData(1.0, 1);
                     else if (s.Equals("false", StringComparison.OrdinalIgnoreCase))
                         return new SrezTable.CnlData(0.0, 1);
                     else if (double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out val))
                         return new SrezTable.CnlData(val, 1);
                     else
                         return SrezTable.CnlData.Empty;
                 default:
                     return SrezTable.CnlData.Empty;
             }
         }
         catch (Exception ex)
         {
             WriteToLog(string.Format(Localization.UseRussian ?
                 "Ошибка при расшифровке данных \"{0}\" типа {1}: {2}" :
                 "Error decoding data \"{0}\" of type {1}: {2}",
                 data.ToString(), data.TypeCode.ToString(), ex.Message));
             return SrezTable.CnlData.Empty;
         }
     }
 }
		/// <summary>
		/// Computes the hash.
		/// </summary>
		/// <param name="version">The version.</param>
		/// <param name="header">The header.</param>
		/// <param name="parameters">The parameters.</param>
		/// <param name="scopeBytes">The scope bytes.</param>
		/// <param name="privacy">The privacy provider.</param>
		/// <returns></returns>
		private OctetString ComputeHash(VersionCode version, ISegment header, SecurityParameters parameters, ISnmpData scopeBytes, IPrivacyProvider privacy)
		{
			if (scopeBytes == null)
			{
				throw new ArgumentNullException("scopeBytes");
			}

			byte[] key = PasswordToKey(_password, parameters.EngineId.GetRaw());
#if ! SILVERLIGHT  //mc++
			using (HMACMD5 md5 = new HMACMD5(key))
			{
				byte[] hash = md5.ComputeHash(SnmpMessageExtension.PackMessage(version, header, parameters, scopeBytes, privacy).ToBytes());
				md5.Clear();
				byte[] result = new byte[DigestLength];
				Array.Copy(hash, result, result.Length);
				return new OctetString(result);
			}
#endif
			return null;
		}
Exemple #51
0
 /// <summary>
 /// Преобразовать данные переменной SNMP в строку для вывода в журнал
 /// </summary>
 private string ConvertVarDataToString(ISnmpData data)
 {
     if (data == null)
     {
         return "null";
     }
     else
     {
         return new StringBuilder(data.ToString())
             .Append(" (")
             .Append(data.TypeCode.ToString())
             .Append(")").ToString();
     }
 }
 public SysORIndex(int index)
     : base("1.3.6.1.2.1.1.9.1.1.{0}", index)
 {
     _data = new Integer32(index);
 }
Exemple #53
0
 public OidStartTest()
     : base(SNMPHelper.StartTestPath)
 {
     _data = new Integer32(0);
 }
Exemple #54
0
        /// <summary>
        /// Decrypts the specified data.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public ISnmpData Decrypt(ISnmpData data, SecurityParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            
            if (data.TypeCode != SnmpType.OctetString)
            {
                throw new SnmpException("cannot decrypt the scope data");
            }
            
            var octets = (OctetString)data;
            var bytes = octets.GetRaw();
            var pkey = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());

            // decode encrypted packet
            var decrypted = Decrypt(bytes, pkey, parameters.EngineBoots.ToInt32(), parameters.EngineTime.ToInt32(), parameters.PrivacyParameters.GetRaw());
            return DataFactory.CreateSnmpData(decrypted);
        }
Exemple #55
0
        internal static Sequence PackMessage(byte[] length, VersionCode version, ISegment header, ISegment parameters, ISnmpData data)
        {
            if (header == null)
            {
                throw new ArgumentNullException("header");
            }

            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            var items = new[] 
            {
                new Integer32((int)version),
                header.GetData(version),
                parameters.GetData(version),
                data
            };
            return new Sequence(length, items);
        }
Exemple #56
0
 public OidStartTest(string path, int value)
     : base(path)
 {
     _data = new Integer32(value);
 }
 /// <summary>
 /// Creates a variable.
 /// </summary>
 /// <param name="textual">The textual ID.</param>
 /// <param name="data">The data.</param>
 /// <returns></returns>
 public Variable CreateVariable(string textual, ISnmpData data)
 {
     return new Variable(Translate(textual), data);
 }
Exemple #58
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IfLastChange"/> class.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <param name="networkInterface">The network interface.</param>
 public IfLastChange(int index, NetworkInterface networkInterface)
     : base("1.3.6.1.2.1.2.2.1.9.{0}", index)
 {
     _data = new TimeTicks(0);
 }
Exemple #59
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IfSpecific"/> class.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <param name="networkInterface">The network interface.</param>
 public IfSpecific(int index, NetworkInterface networkInterface)
     : base("1.3.6.1.2.1.2.2.1.22.{0}", index)
 {
     _data = new ObjectIdentifier("0.0");
 }
		/// <summary>
		/// Encrypts the specified scope.
		/// </summary>
		/// <param name="data">The scope data.</param>
		/// <param name="parameters">The parameters.</param>
		/// <returns></returns>
		public ISnmpData Encrypt(ISnmpData data, SecurityParameters parameters)
		{
			if (data == null)
			{
				throw new ArgumentNullException("data");
			}
			
			if (parameters == null)
			{
				throw new ArgumentNullException("parameters");
			}
			
			byte[] pkey = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());
			byte[] bytes = ByteTool.ToBytes(data);
			int reminder = bytes.Length % 8;
			int count = reminder == 0 ? 0 : 8 - reminder;
			using (MemoryStream stream = new MemoryStream())
			{
				stream.Write(bytes, 0, bytes.Length);
				for (int i = 0; i < count; i++)
				{
					stream.WriteByte(1);
				}

				bytes = stream.ToArray();
			}
			
			byte[] encrypted = Encrypt(bytes, pkey, parameters.PrivacyParameters.GetRaw());
			return new OctetString(encrypted);
		}