Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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}");
                    }
                }
            });
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
 /// <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 "";
 }
Exemplo n.º 9
0
 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;
     }
 }
Exemplo n.º 10
0
        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.");
                    }
                }
            }
        }
Exemplo n.º 11
0
        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));
                    }
                }
            }
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
        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);
        }