/// <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())); }
/// <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)); }
/// <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)); }
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); }
/// <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); }