Exemple #1
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));
        }
        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()));
        }
        public void TestEncrypt2()
        {
            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"));
            var         priv     = new TripleDESPrivacyProvider(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()));
        }
Exemple #4
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(nameof(data));
            }

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

            if (data.TypeCode != SnmpType.Sequence && !(data is ISnmpPdu))
            {
                throw new ArgumentException("Invalid data type.", nameof(data));
            }

            var key      = 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, key, parameters.EngineBoots.ToInt32(), parameters.EngineTime.ToInt32(),
                                    parameters.PrivacyParameters.GetRaw());

            return(new OctetString(encrypted));
        }
Exemple #5
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");
            }

            byte[] pkey     = AuthenticationProvider.PasswordToKey(_phrase.GetRaw(), parameters.EngineId.GetRaw());
            byte[] bytes    = data.ToBytes();
            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));
        }
Exemple #6
0
        static List <ArpEntry> ScanTarget(IPAddress ip, ScanOptions options)
        {
            List <ArpEntry> results = new List <ArpEntry>();

            OctetString community = new OctetString(options.Community);

            List <Variable> ARPTypeResult     = new List <Variable>();
            List <Variable> ARPIPResult       = new List <Variable>();
            List <Variable> ARPPhysAddrResult = new List <Variable>();

            try
            {
                Messenger.BulkWalk(VersionCode.V2,
                                   new IPEndPoint(ip, 161),
                                   new OctetString(options.Community),
                                   new ObjectIdentifier("1.3.6.1.2.1.4.22.1.4"),
                                   ARPTypeResult,
                                   options.SNMPTimeout,
                                   10,
                                   WalkMode.WithinSubtree,
                                   null,
                                   null);

                Messenger.BulkWalk(VersionCode.V2,
                                   new IPEndPoint(ip, 161),
                                   new OctetString(options.Community),
                                   new ObjectIdentifier("1.3.6.1.2.1.4.22.1.2"),
                                   ARPPhysAddrResult,
                                   options.SNMPTimeout,
                                   10,
                                   WalkMode.WithinSubtree,
                                   null,
                                   null);

                Messenger.BulkWalk(VersionCode.V2,
                                   new IPEndPoint(ip, 161),
                                   new OctetString(options.Community),
                                   new ObjectIdentifier("1.3.6.1.2.1.4.22.1.3"),
                                   ARPIPResult,
                                   options.SNMPTimeout,
                                   10,
                                   WalkMode.WithinSubtree,
                                   null,
                                   null);
            }
            catch (Lextm.SharpSnmpLib.Messaging.TimeoutException te)
            {
                Console.WriteLine("Request to {0} timed out, skipping... : {1}", ip, te);
                return(results);
            }


            foreach (Variable v in ARPTypeResult)
            {
                if (v.Data.Equals(new Integer32(4)) && options.ProcessStaticARPEntries == false)
                {
                    continue;
                }
                else if (v.Data.Equals(new Integer32(3)) && options.ProcessDynamicARPEntries == false)
                {
                    continue;
                }
                else if (v.Data.Equals(new Integer32(2)) && options.ProcessInvalidARPEntries == false)
                {
                    continue;
                }
                else if (v.Data.Equals(new Integer32(1)) && options.ProcessOtherARPEntries == false)
                {
                    continue;
                }

                uint[] numID = v.Id.ToNumerical().ToArray();

                numID[9] = 3;
                ObjectIdentifier IPID = new ObjectIdentifier(numID);

                ISnmpData IPData = ARPIPResult.Where(i => i.Id == IPID).Select(x => x).Single().Data;

                numID[9] = 2;
                ObjectIdentifier PhysAddrID   = new ObjectIdentifier(numID);
                ISnmpData        PhysAddrData = ARPPhysAddrResult.Where(i => i.Id == PhysAddrID).Select(x => x).Single().Data;

                System.Net.NetworkInformation.PhysicalAddress mac = new System.Net.NetworkInformation.PhysicalAddress(PhysAddrData.ToBytes().Skip(2).ToArray());

                ArpEntry entry = new ArpEntry(IPAddress.Parse(IPData.ToString()), mac);

                results.Add(entry);
            }

            return(results);
        }
Exemple #7
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);
        }