/// <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); } } }
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 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 string ConvertVarDataToString(ISnmpData snmpData, bool isBits, int maxLen = -1, bool addType = true) { if (snmpData == null) { return("null"); } else { StringBuilder sb = new StringBuilder(); if (snmpData is OctetString) { if (isBits) { sb.Append(((OctetString)snmpData).ToHexString()); } else { string s = snmpData.ToString(); if (maxLen > 0 && s.Length > maxLen) { sb.Append(s.Substring(0, maxLen)).Append("..."); } else { sb.Append(s); } } } else { sb.Append(snmpData.ToString()); } if (addType) { sb.Append(" (").Append(snmpData.TypeCode.ToString()).Append(")"); } return(sb.ToString()); } }
/// <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); }
public object GetValuesAgainstOids(string oid, String community) { IList <Variable> oids = new List <Variable>(); oids.Add(new Variable(new ObjectIdentifier(String.Format(".{0}.0", oid)))); try { #if !NETCORE if (this.messenger != null) { oids = messenger.GetValuesAgaintOIDs(new OctetString(community), oids); exceptionOccurred = false; } #endif } catch (Exception ex) { exceptionOccurred = true; throw; } if (oids != null && oids.Count > 0) { ISnmpData data = oids[0].Data; if (data != null) { string dataStr = data.ToString(); if (!data.ToString().Equals("Null")) { return(dataStr); } } } 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 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)); } }
public JsonResult getSingleInformation() { ISnmpData data = null; var result = Messenger.Get(VersionCode.V2, new IPEndPoint(IPAddress.Any, 161), new OctetString("public"), new List <Variable> { new Variable(new ObjectIdentifier(".1.3.6.1.2.1.1.3")) }, 60000); foreach (var a in result) { data = a.Data; } return(new JsonResult(new { SystemUpTime = data.ToString(), })); }
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> /// Расшифровать данные переменной 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> /// Преобразовать данные переменной 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(); } }
/// <summary> /// Декодировать данные переменной SNMP /// </summary> private bool DecodeVarData(ISnmpData snmpData, bool isBits, out SrezTableLight.CnlData tagData, out bool isString) { tagData = SrezTableLight.CnlData.Empty; isString = false; if (snmpData == null) { return(false); } else if (isBits) { if (snmpData.TypeCode == SnmpType.OctetString) { // получение значения типа BITS: последний полученный байт строки - младший байт значения тега byte[] snmpRaw = ((OctetString)snmpData).GetRaw(); byte[] tagRaw = new byte[8]; for (int i = 0, j = snmpRaw.Length - 1; i < 8; i++, j--) { tagRaw[i] = j >= 0 ? snmpRaw[j] : (byte)0; } tagData = new SrezTableLight.CnlData(BitConverter.ToUInt64(tagRaw, 0), 1); return(true); } else { return(false); } } else { try { switch (snmpData.TypeCode) { case SnmpType.Integer32: tagData = new SrezTableLight.CnlData(((Integer32)snmpData).ToInt32(), 1); return(true); case SnmpType.Counter32: tagData = new SrezTableLight.CnlData(((Counter32)snmpData).ToUInt32(), 1); return(true); case SnmpType.Counter64: tagData = new SrezTableLight.CnlData(((Counter64)snmpData).ToUInt64(), 1); return(true); case SnmpType.Gauge32: tagData = new SrezTableLight.CnlData(((Gauge32)snmpData).ToUInt32(), 1); return(true); case SnmpType.TimeTicks: tagData = new SrezTableLight.CnlData(((TimeTicks)snmpData).ToUInt32(), 1); return(true); case SnmpType.OctetString: string s = snmpData.ToString().Trim(); double val; if (s.Equals("true", StringComparison.OrdinalIgnoreCase)) { tagData = new SrezTableLight.CnlData(1.0, 1); return(true); } else if (s.Equals("false", StringComparison.OrdinalIgnoreCase)) { tagData = new SrezTableLight.CnlData(0.0, 1); return(true); } else if (double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out val)) { tagData = new SrezTableLight.CnlData(val, 1); return(true); } else { // преобразование 8 байт строки в число double tagData = new SrezTableLight.CnlData(ScadaUtils.EncodeAscii(s), 1); isString = true; return(true); } default: return(false); } } catch (Exception ex) { WriteToLog(string.Format(Localization.UseRussian ? "Ошибка при расшифровке данных \"{0}\" типа {1}: {2}" : "Error decoding data \"{0}\" of type {1}: {2}", snmpData.ToString(), snmpData.TypeCode.ToString(), ex.Message)); return(false); } } }
public SNMPReceivedArgs(ObjectIdentifier oid, ISnmpData data) { OID = oid.ToString(); Data = data.ToString(); }