/// <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); }
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()); }
/// <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)); }
/// <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()); }
//-------------------------------------------------------------------- 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())); }
//------------------------------------------------------------------------------- //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); }
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) { } }); }
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()); }
/// <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); } } }
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()); }
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()); }
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()); }
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()); }
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()); }
/// <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(); }
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()); }
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()); }
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); } }
/// <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; }
/// <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()); } }
/// <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); } }
/// <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()); } }
/// <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]; }
/// <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 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; }
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); } }
public void AssignData(ISnmpData val) { _data = (OctetString) val; }
/// <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; }
/// <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; }
/// <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; }
/// <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); }
public OidStartTest() : base(SNMPHelper.StartTestPath) { _data = new Integer32(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); }
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); }
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); }
/// <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); }
/// <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); }