private string SendRequests(UdpTarget target, SecureAgentParameters param) { try { SnmpV3Packet indexResult = (SnmpV3Packet)target.Request(_index, param); SnmpV3Packet descrResult = (SnmpV3Packet)target.Request(_descr, param); SnmpV3Packet typeResult = (SnmpV3Packet)target.Request(_type, param); if (indexResult.ScopedPdu.ErrorStatus != 0 || descrResult.ScopedPdu.ErrorStatus != 0 || typeResult.ScopedPdu.ErrorStatus != 0) { Logger.Log("SNMP Request Error", Logger.MessageType.ERROR); return("<color><red>ERROR: packet error status = " + indexResult.ScopedPdu.ErrorStatus.ToString() + " and not ZERO"); } else { for (int i = 0; i < indexResult.ScopedPdu.VbCount; i++) { _output += "Interface " + indexResult.ScopedPdu.VbList[i].Value.ToString() + ": Type " + typeResult.ScopedPdu.VbList[i].Value.ToString() + " -> " + descrResult.ScopedPdu.VbList[i].Value.ToString() + "\n"; } Logger.Log("Successfully performed SNMP Device Request", Logger.MessageType.INFORM); return(_output); } } catch (Exception) { Logger.Log("SNMP Request Error", Logger.MessageType.ERROR); return("<color><red>ERROR: sending requests failed"); } }
private uint ParameterCountRequest(SecureAgentParameters param, UdpTarget target) { Oid deviceNr = new Oid(_ifNr); Pdu devices = new Pdu(PduType.Get); devices.VbList.Add(deviceNr); try { SnmpV3Packet devicesResult = (SnmpV3Packet)target.Request(devices, param); if (devicesResult.ScopedPdu.ErrorStatus != 0) { return(0); } else { return(Convert.ToUInt32(devicesResult.ScopedPdu.VbList[0].Value.ToString())); } } catch (Exception) { return(0); } }
static void Main(string[] args) { SnmpV3Packet packet = new SnmpV3Packet(); // Set the security name packet.NoAuthNoPriv(ASCIIEncoding.UTF8.GetBytes("mysecurityname")); // Set your engine id packet.USM.EngineId.Set(new byte[] { 0x80, 0x00, 0x05, 0x23, 0x01, 0xc0, 0xa8, 0x8a, 0x01 }); // Engine id is also stored in the ScopedPdu so just duplicate it packet.ScopedPdu.ContextEngineId.Set(packet.USM.EngineId); // Set your engine boots (can be 0) packet.USM.EngineBoots = 20; // Set your engine time packet.USM.EngineTime = 200; // Set message reportable flag to false. You don't really want to receive errors packet.MsgFlags.Reportable = false; // Pdu type is V2TRAP packet.Pdu.Type = PduType.V2Trap; // Set the TRAP object ID value packet.Pdu.TrapObjectID.Set(new int[] { 1, 3, 6, 1, 2, 1, 2, 2, 1, 0 }); // Set your system up time value (this has nothing to do with engineTime) packet.Pdu.TrapSysUpTime.Value = 23456; // Add variable bindings to the Pdu to further describe the TRAP packet.Pdu.VbList.Add(new SnmpSharpNet.Oid(new int[] { 1, 3, 6, 1, 2, 1, 1, 1, 0 }), new OctetString("Test noAuthNoPriv")); // Finally, encode into a byte buffer ready for sending byte[] outBuffer = packet.encode(); // Send it to the manager Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.SendTo(outBuffer, new IPEndPoint(IPAddress.Parse("10.6.3.30"), 162)); }
private void ExecuteRequest(UdpTarget target, SecureAgentParameters param) { Oid _name = new Oid("1.3.6.1.2.1.1.5.0"); Pdu _namePacket = new Pdu(PduType.Get); _namePacket.VbList.Add(_name); try { SnmpV3Packet nameResult = (SnmpV3Packet)target.Request(_namePacket, param); if (nameResult.ScopedPdu.VbList[0].Value.ToString().ToLowerInvariant() == System.Environment.MachineName.ToLowerInvariant()) { Logger.Log("SNMP Service seems to work", Logger.MessageType.INFORM); outp.outState = JobOutput.OutState.Success; } else { Logger.Log("SNMP Service seems to be dead", Logger.MessageType.ERROR); outp.outState = JobOutput.OutState.Failed; } } catch (Exception) { Logger.Log("SNMP Service seems to be dead", Logger.MessageType.ERROR); outp.outState = JobOutput.OutState.Exception; } }
public void Listen() { var ipEndPoint = new IPEndPoint(IPAddress.Any, 162); Task.Run(async() => { var run = true; while (run) { try { using (var udpListener = new UdpClient(ipEndPoint)) { var udpRecieveResult = await udpListener.ReceiveAsync(); var recievedData = udpRecieveResult.Buffer; int protocolVersion = SnmpPacket.GetProtocolVersion(recievedData, recievedData.Length); switch (protocolVersion) { case (int)SnmpVersion.Ver1: var snmpV1TrapPacket = new SnmpV1TrapPacket(); snmpV1TrapPacket.decode(recievedData, recievedData.Length); RecieveTrap(snmpV1TrapPacket); break; case (int)SnmpVersion.Ver2: var snmpV2Packet = new SnmpV2Packet(); snmpV2Packet.decode(recievedData, recievedData.Length); RecieveTrap(snmpV2Packet); break; case (int)SnmpVersion.Ver3: var snmpV3Packet = new SnmpV3Packet(); snmpV3Packet.decode(recievedData, recievedData.Length); RecieveTrap(snmpV3Packet); break; } } } catch (SocketException) { ErrorMessageBox.Show($"Port {ipEndPoint.Port} is already used."); run = false; } catch (Exception e) { ErrorMessageBox.Show($"{e.Message}"); } } }); }
/// <summary> /// Search variable bindings list in the passed packet for usm error OIDs and return /// error string value. /// </summary> /// <param name="packet">Packet to search for error OIDs</param> /// <returns>Error string if found in the packet, otherwise an empty string.</returns> public static string TranslateError(SnmpV3Packet packet) { foreach (Vb v in packet.Pdu.VbList) { if (v.Oid.Compare(SnmpConstants.UsmStatsUnsupportedSecLevels) == 0) { return(string.Format("usmStatsUnsupportedSecLevels: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.UsmStatsNotInTimeWindows) == 0) { return(string.Format("usmStatsNotInTimeWindows: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.UsmStatsUnknownSecurityNames) == 0) { return(string.Format("usmStatsUnknownSecurityNames: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.UsmStatsUnknownEngineIDs) == 0) { return(string.Format("usmStatsUnknownEngineIDs: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.UsmStatsWrongDigests) == 0) { return(string.Format("usmStatsWrongDigests: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.UsmStatsDecryptionErrors) == 0) { return(string.Format("usmStatsDecryptionErrors: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.SnmpUnknownSecurityModels) == 0) { return(string.Format("snmpUnknownSecurityModels: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.SnmpInvalidMsgs) == 0) { return(string.Format("snmpInvalidMsgs: {0}", v.Value.ToString())); } else if (v.Oid.Compare(SnmpConstants.SnmpUnknownPDUHandlers) == 0) { return(string.Format("snmpUnknownPDUHandlers: {0}", v.Value.ToString())); } } return(string.Empty); }
private void ExecuteRequest(UdpTarget target, SecureAgentParameters param) { string outOctetsString = "1.3.6.1.2.1.2.2.1.16"; Oid outOctets = new Oid(outOctetsString + "." + ifEntryNr); Pdu octets = new Pdu(PduType.Get); octets.VbList.Add(outOctets); try { SnmpV3Packet _octetsResult = (SnmpV3Packet)target.Request(octets, param); if (_octetsResult.ScopedPdu.ErrorStatus != 0) { outp.outState = JobOutput.OutState.Failed; Logging.Logger.Log("Something went wrong with reading the traffic. The Error Status of SNMP was not equal 0, but " + _octetsResult.ScopedPdu.ErrorStatus.ToString(), Logging.Logger.MessageType.ERROR); } else { uint _result = (uint)Convert.ToUInt64(_octetsResult.Pdu.VbList[0].Value.ToString()) - _lastRecord; _lastRecord = (uint)Convert.ToUInt64(_octetsResult.Pdu.VbList[0].Value.ToString()); if (firstRun) { outp.GetOutputDesc("Bytes").dataObject = 0; } else { outp.GetOutputDesc("Bytes").dataObject = _result; } outp.outState = JobOutput.OutState.Success; Logging.Logger.Log("Traffic Read reports Success", Logging.Logger.MessageType.DEBUG); } } catch (Exception ex) { outp.outState = JobOutput.OutState.Failed; Logging.Logger.Log("Something went wrong with reading the traffic. The message is: " + ex.Message, Logging.Logger.MessageType.ERROR); } }
/// <summary> /// Search variable bindings list in the passed packet for usm error OIDs and return /// error string value. /// </summary> /// <param name="packet">Packet to search for error OIDs</param> /// <returns>Error string if found in the packet, otherwise an empty string.</returns> public static string TranslateError(SnmpV3Packet packet) { foreach (Vb v in packet.Pdu.VbList) { if (v.Oid.Compare(SnmpConstants.usmStatsUnsupportedSecLevels) == 0) { return string.Format("usmStatsUnsupportedSecLevels: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.usmStatsNotInTimeWindows) == 0) { return string.Format("usmStatsNotInTimeWindows: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.usmStatsUnknownSecurityNames) == 0) { return string.Format("usmStatsUnknownSecurityNames: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.usmStatsUnknownEngineIDs) == 0) { return string.Format("usmStatsUnknownEngineIDs: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.usmStatsWrongDigests) == 0) { return string.Format("usmStatsWrongDigests: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.usmStatsDecryptionErrors) == 0) { return string.Format("usmStatsDecryptionErrors: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.snmpUnknownSecurityModels) == 0) { return string.Format("snmpUnknownSecurityModels: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.snmpInvalidMsgs) == 0) { return string.Format("snmpInvalidMsgs: {0}", v.Value.ToString()); } else if (v.Oid.Compare(SnmpConstants.snmpUnknownPDUHandlers) == 0) { return string.Format("snmpUnknownPDUHandlers: {0}", v.Value.ToString()); } } return ""; }
private void backgroundWorkerMain_DoWork(object sender, DoWorkEventArgs e) { try { e.Result = null; if (snmpObj.Version != SnmpVersion.Ver3) { SimpleSnmp simpleSnmp = new SimpleSnmp(snmpObj.IP, snmpObj.Port, snmpObj.CommunityName, snmpObj.Timeout, 1); if (snmpObj.PduType == PduType.Get) { result = simpleSnmp.Get(snmpObj.Version, snmpObj.Pdu); } else if (snmpObj.PduType == PduType.GetNext) { result = simpleSnmp.GetNext(snmpObj.Version, snmpObj.Pdu); } else if (snmpObj.PduType == PduType.GetBulk && snmpObj.Version == SnmpVersion.Ver2) { result = simpleSnmp.GetBulk(snmpObj.Pdu); } else if (snmpObj.PduType == PduType.Set) { result = simpleSnmp.Set(snmpObj.Version, snmpObj.Pdu); } } else { UdpTarget target = new UdpTarget(IPAddress.Parse(snmpObj.IP), snmpObj.Port, snmpObj.Timeout, 0); SnmpV3Packet packet = (SnmpV3Packet)target.Request(snmpObj.Pdu, snmpObj.Parameters); e.Result = packet; } } catch (Exception ex) { e.Result = ex.Message; } }
static void Main(string[] args) { SiAuto.Si.Enabled = true; SiAuto.Si.Level = Level.Debug; SiAuto.Si.Connections = @"file(filename=""" + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\log.sil\",rotate=weekly,append=true,maxparts=5,maxsize=500MB)"; // Construct a socket and bind it to the trap manager port 162 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 162); EndPoint ep = (EndPoint)ipep; socket.Bind(ep); // Disable timeout processing. Just block until packet is received socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0); #region sms var smsSendTimer = new System.Timers.Timer(5); smsSendTimer.Elapsed += (sender, e) => { string result = null; string deviceName = null; string stateId = null; //ThreadPool.QueueUserWorkItem(delegate //{ if (smsQueue.TryDequeue(out result)) { string[] getStrings = result.Split(new char[] { '&' }); if (getStrings.Length.Equals(2)) { deviceName = getStrings[0]; stateId = getStrings[1]; //SendStatusSMS(deviceName, stateId); } } //}); }; smsSendTimer.Enabled = true; #endregion sms #region sendSmsIfStatusStillInSpecficTime /* * System.Timers.Timer timerSmsSend = new System.Timers.Timer(); * //計時器啟動 * timerSmsSend.Elapsed += new ElapsedEventHandler(timerSmsSend_Elapsed); * //計時器啟動 設定觸發時間 * timerSmsSend.Interval = 60000; * timerSmsSend.Start(); */ System.Threading.Thread t1 = new System.Threading.Thread (delegate() { while (true) { Thread.Sleep(new TimeSpan(0, 0, 1, 0)); timerSmsSend_Elapsed(); } }); t1.Start(); #endregion sendSmsIfStatusStillInSpecficTime bool run = true; while (run) { byte[] indata = new byte[16 * 1024]; // 16KB receive buffer int inlen = 0; IPEndPoint peer = new IPEndPoint(IPAddress.Any, 0); EndPoint inep = (EndPoint)peer; try { inlen = socket.ReceiveFrom(indata, ref inep); } catch (Exception ex) { Console.WriteLine("Exception {0}", ex.Message); inlen = -1; } if (inlen > 0) { // Check protocol version int int ver = SnmpPacket.GetProtocolVersion(indata, inlen); if (ver == (int)SnmpVersion.Ver1) { // Parse SNMP Version 1 TRAP packet /* * SnmpV1TrapPacket pkt = new SnmpV1TrapPacket(); * pkt.decode(indata, inlen); * * Console.WriteLine("** SNMP Version 1 TRAP received from {0}:", inep.ToString()); * Console.WriteLine("*** Trap generic: {0}", pkt.Pdu.Generic); * Console.WriteLine("*** Trap specific: {0}", pkt.Pdu.Specific); * Console.WriteLine("*** Agent address: {0}", pkt.Pdu.AgentAddress.ToString()); * Console.WriteLine("*** Timestamp: {0}", pkt.Pdu.TimeStamp.ToString()); * Console.WriteLine("*** VarBind count: {0}", pkt.Pdu.VbList.Count); * Console.WriteLine("*** VarBind content:"); * * foreach (Vb v in pkt.Pdu.VbList) { * Console.WriteLine("**** {0} {1}: {2}", v.Oid.ToString(), SnmpConstants.GetTypeName(v.Value.Type), v.Value.ToString()); * } * Console.WriteLine("** End of SNMP Version 1 TRAP data."); */ } else { // Parse SNMP Version 2 TRAP packet SnmpV3Packet pkt = SnmpV3Packet.DiscoveryRequest(); pkt.decode(indata, inlen); //Console.WriteLine("** SNMP Version 3 TRAP received from {0}:", inep.ToString()); if (pkt.Version != SnmpVersion.Ver3) { Console.WriteLine("*** NOT an SNMPv3 trap ****"); } else { //Console.WriteLine("*** Community: {0}", pkt.Community.ToString()); StringBuilder sb = new StringBuilder(); /* * Console.WriteLine(pkt.GetType()); * Console.WriteLine(pkt.USM); * Console.WriteLine(pkt.USM.AuthenticationSecret); * Console.WriteLine(pkt.USM.PrivacySecret); * Console.WriteLine(pkt.Pdu.RequestId); * Console.WriteLine(pkt.USM.EngineId); * Console.WriteLine(pkt.USM.SecurityName); * Console.WriteLine(pkt.ScopedPdu.ContextEngineId); * Console.WriteLine(pkt.ScopedPdu.ContextName); * Console.WriteLine("trapSysUpTime.0: {0}", pkt.Pdu.TrapSysUpTime.ToString()); * Console.WriteLine("trapObjectID.0 : {0}", pkt.Pdu.TrapObjectID.ToString()); * Console.WriteLine("*** VarBind count: {0}", pkt.Pdu.VbList.Count); * Console.WriteLine("*** VarBind content:"); */ string serverityLevel = null, ipAddress = null, eventMessage = null, location = null; foreach (Vb v in pkt.Pdu.VbList) { //Console.WriteLine("**** {0} {1}: {2}", v.Oid.ToString(), SnmpConstants.GetTypeName(v.Value.Type),v.Value.ToString()); sb.Append(v.Oid.ToString()).Append(" = ").Append(v.Value.ToString()).AppendLine(); switch (v.Oid.ToString()) { case "1.3.6.1.4.1.161.3.10.105.9.0": //severity level serverityLevel = v.Value.ToString(); break; case "1.3.6.1.4.1.161.3.10.105.8.0": //location location = v.Value.ToString(); break; case "1.3.6.1.4.1.161.3.10.105.10.0": //IpAddress try { string ip = v.Value.ToString(); string ValidIpAddressRegex = @"^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; Regex r = new Regex(ValidIpAddressRegex, RegexOptions.IgnoreCase | RegexOptions.Singleline); Match m = r.Match(ip); if (m.Success) { //Console.WriteLine(m.Value + " valid"); ipAddress = m.Value; ipAddress = ip; } else { //Console.WriteLine("invalid"); } } catch (Exception) { throw; } break; case "1.3.6.1.4.1.161.3.10.105.13.0": //event message eventMessage = v.Value.ToString().Replace(@"'", @"''"); break; } } Console.WriteLine("serverityLevel:" + serverityLevel + Environment.NewLine + "location:" + location + Environment.NewLine + "eventMessage:" + eventMessage); if (serverityLevel.Equals("0")) { SiAuto.Main.LogWarning("serverityLevel:" + serverityLevel + Environment.NewLine + "location:" + location + Environment.NewLine + "eventMessage:" + eventMessage); } if (smsSB.ToString().Equals(location + "&" + serverityLevel)) { //do nothing } else { if (serverityLevel != null && location != null && eventMessage != null) { Thread writeCurrentDeviceStatusThread = new System.Threading.Thread (delegate() { //update device string DeviceNo = null; string SiteCName = null; string DeviceCName = null; string queryDeviceNo = @"SELECT public.device_info.device_no, public.site_info_nbi.site_name, public.device_base.device_cname FROM public.device_info INNER JOIN public.site_info_nbi ON public.device_info.site_id = public.site_info_nbi.site_id INNER JOIN public.device_base ON public.device_info.device_id = public.device_base.device_id WHERE public.device_info.device_name ='" + location + "'"; try { using (DataTable dt = pgsqSqlClient.get_DataTable(queryDeviceNo)) { if (dt != null && dt.Rows.Count != 0) { foreach (DataRow row in dt.Rows) { DeviceNo = row[0].ToString(); SiteCName = row[1].ToString(); DeviceCName = row[2].ToString(); } } } if (DeviceNo != null && !serverityLevel.Equals("7")) { string checkIfDeviceNoExistInStatusTable = @"SELECT public.device_status_now.device_no FROM public.device_status_now WHERE public.device_status_now.device_no = " + DeviceNo; using (DataTable dt = pgsqSqlClient.get_DataTable(checkIfDeviceNoExistInStatusTable)) { if (dt != null && dt.Rows.Count != 0) { string queryDeviceStatusBySpecificDeviceNo = @"SELECT public.device_status_now.status_code FROM public.device_status_now WHERE public.device_status_now.device_no = " + DeviceNo; using (DataTable dt2 = pgsqSqlClient.get_DataTable(queryDeviceStatusBySpecificDeviceNo)) { string stateResult = string.Empty; if (dt2 != null && dt2.Rows.Count != 0) { stateResult = dt2.Rows[0].ItemArray[0] .ToString(); string updateSqlScript = null; if (stateResult.Equals(serverityLevel)) { //do nothing } else { //update updateSqlScript = @"UPDATE public.device_status_now SET status_code = " + serverityLevel + @" ,message = '" + eventMessage + @"' " + @",update_time=now(),site_and_device_name='" + SiteCName + " " + DeviceCName + @"',send_status = 0 WHERE device_no = " + DeviceNo; pgsqSqlClient.modify(updateSqlScript); //send sms //if (serverityLevel.Equals("1") || serverityLevel.Equals("2")) { SiAuto.Main.AddCheckpoint("location & serverityLevel", smsSB.ToString()); smsSB.Clear(); smsSB.Insert(0, location + "&" + serverityLevel); SiAuto.Main.AddCheckpoint("location-serverityLevel-eventMessage", "location:" + location + Environment.NewLine + "serverityLevel:" + serverityLevel + Environment.NewLine + "eventMessage:" + eventMessage); smsQueue.Enqueue(SiteCName + " " + DeviceCName + "&" + serverityLevel); } } } } } else { //insert string insertSqlScript = @"INSERT INTO public.device_status_now VALUES (" + DeviceNo + @"," + serverityLevel + @",'" + eventMessage + "'" + @",now(),0,'" + SiteCName + " " + DeviceCName + @"')"; pgsqSqlClient.modify(insertSqlScript); //send sms //if (serverityLevel.Equals("1") || serverityLevel.Equals("2")) { SiAuto.Main.AddCheckpoint("location & serverityLevel", smsSB.ToString()); smsSB.Clear(); smsSB.Insert(0, location + "&" + serverityLevel); SiAuto.Main.AddCheckpoint("location-serverityLevel-eventMessage", "location:" + location + Environment.NewLine + "serverityLevel:" + serverityLevel + Environment.NewLine + "eventMessage:" + eventMessage); smsQueue.Enqueue(SiteCName + " " + DeviceCName + "&" + serverityLevel); } } } string querySiteID = @"SELECT public.device_info.site_id FROM public.device_info WHERE public.device_info.device_no =" + DeviceNo; string siteID = null; using (DataTable dt = pgsqSqlClient.get_DataTable(querySiteID)) { if (dt != null && dt.Rows.Count != 0) { foreach (DataRow row in dt.Rows) { siteID = row[0].ToString(); } } } if (siteID != null) { string queryDeviceList = @"SELECT device_no FROM device_info WHERE site_id=" + siteID; List <int> deviceList = new List <int>(); using (DataTable dt = pgsqSqlClient.get_DataTable(queryDeviceList)) { if (dt != null && dt.Rows.Count != 0) { foreach (DataRow row in dt.Rows) { deviceList.Add(int.Parse(row[0].ToString())); } } } List <int> statusList = new List <int>(); string queryDeviceStatus = @"SELECT public.device_status_now.status_code FROM public.device_status_now WHERE public.device_status_now.device_no = "; for (int i = 0; i < deviceList.Count; i++) { using (DataTable dt = pgsqSqlClient.get_DataTable(queryDeviceStatus + deviceList[i])) { if (dt != null && dt.Rows.Count != 0) { foreach (DataRow row in dt.Rows) { statusList.Add(int.Parse(row[0].ToString())); } } } } statusList.Sort(); string checkIfSiteIDExist = @"SELECT public.site_status_now_nbi.site_id FROM public.site_status_now_nbi WHERE public.site_status_now_nbi.site_id = " + siteID; using (DataTable dt = pgsqSqlClient.get_DataTable(checkIfSiteIDExist)) { if (dt != null && dt.Rows.Count != 0) { } else { string insertSiteID = @"INSERT INTO site_status_now_nbi VALUES(" + siteID + @",100)"; pgsqSqlClient.modify(insertSiteID); } } string getWorstStatus = @"SELECT public.site_status_now_nbi.status_code FROM public.site_status_now_nbi WHERE public.site_status_now_nbi.site_id = " + siteID; using (DataTable dt = pgsqSqlClient.get_DataTable(getWorstStatus)) { if (dt != null && dt.Rows.Count != 0) { string updateSiteIDStatus = @"UPDATE site_status_now_nbi SET status_code = " + statusList[0] + @" WHERE site_id=" + siteID + ";"; string updateLinkStatus = @"UPDATE link_status_now_nbi SET status_code = " + statusList[0] + @" WHERE bsite_id = " + siteID + ";"; pgsqSqlClient.modify(updateSiteIDStatus + updateLinkStatus); } else { } } } } } catch (Exception e) { Console.WriteLine(e.ToString()); SiAuto.Main.LogException(e); } }); Thread writeToHistoryThread = new System.Threading.Thread (delegate() { string DeviceNo = null; string queryDeviceNo = @"SELECT public.device_info.device_no FROM public.device_info WHERE public.device_info.device_name = '" + location + "'"; try { using (DataTable dt = pgsqSqlClient.get_DataTable(queryDeviceNo)) { if (dt != null && dt.Rows.Count != 0) { foreach (DataRow row in dt.Rows) { DeviceNo = row[0].ToString(); } } } string insertSqlScript = null; if (DeviceNo != null) { insertSqlScript = @"INSERT INTO device_status_history_nbi ( device_no, alarm_status, message_note ) VALUES (" + DeviceNo + @", " + serverityLevel + @", '" + eventMessage + "')"; pgsqSqlClient.modify(insertSqlScript); } } catch (Exception e) { } }); writeCurrentDeviceStatusThread.Start(); writeToHistoryThread.Start(); writeCurrentDeviceStatusThread.Join(); writeToHistoryThread.Join(); } } if (serverityLevel != null && location != null && ipAddress != null && eventMessage != null && false) { if (!File.Exists(Environment.CurrentDirectory + "\\" + DateTime.Now.ToString("yy-MM-dd") + ".csv")) { using (StreamWriter sw = new StreamWriter(Environment.CurrentDirectory + "\\" + DateTime.Now.ToString("yy-MM-dd") + ".csv", true)) { var csv = new CsvWriter(sw); csv.WriteField("serverityLevel"); csv.WriteField("location"); csv.WriteField("ipAddress"); csv.WriteField("eventMessage"); csv.NextRecord(); } } using (StreamWriter sw = new StreamWriter(Environment.CurrentDirectory + "\\" + DateTime.Now.ToString("yy-MM-dd") + ".csv", true)) { var csv = new CsvWriter(sw); csv.WriteField(serverityLevel); csv.WriteField(location); csv.WriteField(ipAddress); csv.WriteField(eventMessage); csv.NextRecord(); } } //SiAuto.Main.LogStringBuilder("receive trp",sb); //Console.WriteLine("receive trp:"+Environment.NewLine+sb.ToString()); //Console.WriteLine("** End of SNMP Version 3 TRAP data."); } } } else { if (inlen == 0) { Console.WriteLine("Zero length packet received."); } } } }
private void device_OnPacketArrival(object sender, CaptureEventArgs packet) { Packet pack = Packet.ParsePacket(packet.Packet.LinkLayerType, packet.Packet.Data); TcpPacket tcpPacket = (TcpPacket)pack.Extract(typeof(TcpPacket)); DateTime time = packet.Packet.Timeval.Date; int len = packet.Packet.Data.Length; if (tcpPacket != null) { IpPacket ipPacket = (IpPacket)tcpPacket.ParentPacket; var packageDetail = new PackageDetail(tcpPacket, null, ipPacket); packageDetailList.Add(packageDetail); var srcIp = ipPacket.SourceAddress; var dstIp = ipPacket.DestinationAddress; var srcPort = tcpPacket.SourcePort; var dstPort = tcpPacket.DestinationPort; writeLine = string.Format("ID: {9} - {0}:{1}:{2},{3} - TCP Packet: {5}:{6} -> {7}:{8}\n\n", time.Hour, time.Minute, time.Second, time.Millisecond, len, srcIp, srcPort, dstIp, dstPort, packageDetail.Id); Invoke(new MethodInvoker(updateLog)); } else { UdpPacket udpPacket = (UdpPacket)pack.Extract(typeof(UdpPacket)); time = packet.Packet.Timeval.Date; len = packet.Packet.Data.Length; if (udpPacket != null) { IpPacket ipPacket = (IpPacket)udpPacket.ParentPacket; var packageDetail = new PackageDetail(null, udpPacket, ipPacket); packageDetailList.Add(packageDetail); IPAddress srcIp = ipPacket.SourceAddress; IPAddress dstIp = ipPacket.DestinationAddress; ushort srcPort = udpPacket.SourcePort; ushort dstPort = udpPacket.DestinationPort; writeLine = (string.Format("ID: {9} - {0}:{1}:{2},{3} - UDP Packet: {5}:{6} -> {7}:{8}\n", time.Hour, time.Minute, time.Second, time.Millisecond, len, srcIp, srcPort, dstIp, dstPort, packageDetail.Id)); Invoke(new MethodInvoker(updateLog)); if (decodeMode == true) { byte[] packetBytes = udpPacket.PayloadData; int version = SnmpPacket.GetProtocolVersion(packetBytes, packetBytes.Length); switch (version) { case (int)SnmpVersion.Ver1: SnmpV1Packet snmpPacket = new SnmpV1Packet(); try { snmpPacket.decode(packetBytes, packetBytes.Length); writeLine = "SNMP.V1 Packet: " + snmpPacket.ToString(); } catch (Exception e) { writeLine = e.ToString(); } break; case (int)SnmpVersion.Ver2: SnmpV2Packet snmp2Packet = new SnmpV2Packet(); try { snmp2Packet.decode(packetBytes, packetBytes.Length); writeLine = "SNMP.V2 Packet: " + snmp2Packet.ToString(); } catch (Exception e) { writeLine = e.ToString(); } break; case (int)SnmpVersion.Ver3: SnmpV3Packet snmp3Packet = new SnmpV3Packet(); try { snmp3Packet.decode(packetBytes, packetBytes.Length); writeLine = "SNMP.V3 Packet: " + snmp3Packet.ToString(); } catch (Exception e) { writeLine = e.ToString(); } break; } Invoke(new MethodInvoker(updateLog)); } } } }
public static Dictionary <string, string> getWalkValue_v3(string host, int port, int snmpver, string comm, string irootOid) { Dictionary <string, string> dic = new Dictionary <string, string>(); // SNMP community name OctetString community = new OctetString(comm); // Define agent parameters class AgentParameters param = new AgentParameters(community); // Set SNMP version to 2 (GET-BULK only works with SNMP ver 2 and 3) param.Version = SnmpVersion.Ver3; // Construct the agent address object // IpAddress class is easy to use here because // it will try to resolve constructor parameter if it doesn't // parse to an IP address IpAddress agent = new IpAddress(host); // Construct target UdpTarget target = new UdpTarget((IPAddress)agent, port, 2000, 1); // Define Oid that is the root of the MIB // tree you wish to retrieve Oid rootOid = new Oid(irootOid); // ifDescr // This Oid represents last Oid returned by // the SNMP agent Oid lastOid = (Oid)rootOid.Clone(); // Pdu class used for all requests Pdu pdu = new Pdu(PduType.GetBulk); // In this example, set NonRepeaters value to 0 pdu.NonRepeaters = 0; // MaxRepetitions tells the agent how many Oid/Value pairs to return // in the response. pdu.MaxRepetitions = 1000; try { // Loop through results while (lastOid != null) { // When Pdu class is first constructed, RequestId is set to 0 // and during encoding id will be set to the random value // for subsequent requests, id will be set to a value that // needs to be incremented to have unique request ids for each // packet if (pdu.RequestId != 0) { pdu.RequestId += 1; } // Clear Oids from the Pdu class. pdu.VbList.Clear(); // Initialize request PDU with the last retrieved Oid pdu.VbList.Add(lastOid); // Make SNMP request SnmpV3Packet result = new SnmpV3Packet(); result.authPriv(ASCIIEncoding.UTF8.GetBytes("milan"), ASCIIEncoding.UTF8.GetBytes("myAuthSecret"), AuthenticationDigests.MD5, ASCIIEncoding.UTF8.GetBytes("myPrivSecret"), PrivacyProtocols.DES); result = (SnmpV3Packet)target.Request(pdu, param); // You should catch exceptions in the Request if using in real application. // If result is null then agent didn't reply or we couldn't parse the reply. if (result != null) { // ErrorStatus other then 0 is an error returned by // the Agent - see SnmpConstants for error definitions if (result.Pdu.ErrorStatus == 0) { // Walk through returned variable bindings foreach (Vb v in result.Pdu.VbList) { // Check that retrieved Oid is "child" of the root OID if (rootOid.IsRootOf(v.Oid)) { dic.Add(v.Oid.ToString(), v.Value.ToString()); } else { // we have reached the end of the requested // MIB tree. Set lastOid to null and exit loop lastOid = null; } } } } } target.Close(); return(dic); } catch (Exception ex) { ex.Message.ToString(); target.Close(); return(dic); } }
public TrapMessage Handler(AbstractSocketData socketData) { if (socketData == null) { return(null); } TrapMessage result; try { int dataLenth = socketData.DataLenth; byte[] dataBytes = socketData.DataBytes; int protocolVersion = SnmpPacket.GetProtocolVersion(dataBytes, dataLenth); TrapMessage trapMessage; SnmpPacket snmpPacket; if (protocolVersion == 0) { trapMessage = new TrapV1Message(); snmpPacket = new SnmpV1TrapPacket(); ((SnmpV1TrapPacket)snmpPacket).decode(dataBytes, dataLenth); } else { if (protocolVersion == 1) { trapMessage = new TrapV2Message(); snmpPacket = new SnmpV2Packet(); ((SnmpV2Packet)snmpPacket).decode(dataBytes, dataLenth); if (snmpPacket.Pdu.Type != PduType.V2Trap) { throw new SnmpException("Invalid SNMP version 2 packet type received."); } } else { trapMessage = new TrapV3Message(); snmpPacket = new SnmpV3Packet(); UserSecurityModel uSM = ((SnmpV3Packet)snmpPacket).GetUSM(dataBytes, dataLenth); if (uSM.EngineId.Length <= 0) { throw new SnmpException("Invalid packet. Authoritative engine id is not set."); } if (uSM.SecurityName.Length <= 0) { throw new SnmpException("Invalid packet. Security name is not set."); } if (this.usmConfigs.Count > 0) { UsmConfig usmConfig = this.FindPeer(uSM.EngineId.ToString(), uSM.SecurityName.ToString()); if (usmConfig == null) { throw new SnmpException("SNMP packet from unknown peer."); } ((SnmpV3Packet)snmpPacket).USM.Authentication = (AuthenticationDigests)usmConfig.Authentication; ((SnmpV3Packet)snmpPacket).USM.Privacy = (PrivacyProtocols)usmConfig.Privacy; if (usmConfig.Privacy != Privacy.None) { ((SnmpV3Packet)snmpPacket).USM.PrivacySecret.Set(usmConfig.PrivacySecret); } if (usmConfig.Authentication != Authentication.None) { ((SnmpV3Packet)snmpPacket).USM.AuthenticationSecret.Set(usmConfig.AuthenticationSecret); } } ((SnmpV3Packet)snmpPacket).decode(dataBytes, dataLenth); if (snmpPacket.Pdu.Type != PduType.V2Trap) { throw new SnmpException("Invalid SNMP version 3 packet type received."); } } } trapMessage.AgentIpAddress = socketData.Target; trapMessage.Port = socketData.Port; SnmpTrapHandler.configTrap(trapMessage, protocolVersion, snmpPacket); this.configVb(trapMessage, protocolVersion, snmpPacket); result = trapMessage; } catch (System.Exception ex) { System.Console.WriteLine(ex.Message); result = null; } return(result); }