Beispiel #1
0
        private void SNMP_RECEIVE()
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 162);
            EndPoint   ep   = (EndPoint)ipep;

            this.Dispatcher.Invoke((Action)(() =>
            {
                button4.IsEnabled = false;
            }));

            socket.Bind(ep);
            // Disable timeout processing. Just block until packet is received
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
            bool run   = true;
            int  inlen = -1;

            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 = SnmpSharpNet.SnmpPacket.GetProtocolVersion(indata, inlen);
                    if (ver == (int)SnmpSharpNet.SnmpVersion.Ver1)
                    {
                        // Parse SNMP Version 1 TRAP packet

                        SnmpSharpNet.SnmpV1TrapPacket pkt = new SnmpSharpNet.SnmpV1TrapPacket();
                        pkt.decode(indata, inlen);

                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            consoleBox.Items.Add(string.Format("** SNMP Version 1 TRAP received from {0}:", inep.ToString()));
                            consoleBox.Items.Add(string.Format("*** Trap generic: {0}", translateReceiver(pkt.Pdu.Generic)));
                            consoleBox.Items.Add(string.Format("*** Trap specific: {0}", pkt.Pdu.Specific));
                            consoleBox.Items.Add(string.Format("*** Agent address: {0}", pkt.Pdu.AgentAddress.ToString()));
                            consoleBox.Items.Add(string.Format("*** Timestamp: {0}", pkt.Pdu.TimeStamp.ToString()));
                            consoleBox.Items.Add(string.Format("*** VarBind count: {0}", pkt.Pdu.VbList.Count));
                            consoleBox.Items.Add(string.Format("*** VarBind content:"));
                        }));

                        foreach (SnmpSharpNet.Vb v in pkt.Pdu.VbList)
                        {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                consoleBox.Items.Add(string.Format("**** {0} {1}: {2}", v.Oid.ToString(), SnmpSharpNet.SnmpConstants.GetTypeName(v.Value.Type), v.Value.ToString()));
                            }));
                        }
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            consoleBox.Items.Add("** End of SNMP Version 1 TRAP data.");
                        }));
                    }
                    else
                    {
                        // Parse SNMP Version 2 TRAP packet
                        SnmpSharpNet.SnmpV2Packet pkt = new SnmpSharpNet.SnmpV2Packet();
                        pkt.decode(indata, inlen);
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            consoleBox.Items.Add(string.Format("** SNMP Version 2 TRAP received from {0}:", inep.ToString()));
                        }));
                        if ((SnmpSharpNet.PduType)pkt.Pdu.Type != SnmpSharpNet.PduType.V2Trap)
                        {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                consoleBox.Items.Add("*** NOT an SNMPv2 trap ****");
                            }));
                        }
                        else
                        {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                consoleBox.Items.Add(string.Format("*** Community: {0}", pkt.Community.ToString()));
                                consoleBox.Items.Add(string.Format("*** VarBind count: {0}", pkt.Pdu.VbList.Count));
                                consoleBox.Items.Add("*** VarBind content:");
                            }));
                            foreach (SnmpSharpNet.Vb v in pkt.Pdu.VbList)
                            {
                                this.Dispatcher.Invoke((Action)(() =>
                                {
                                    consoleBox.Items.Add(string.Format("**** {0} {1}: {2}",
                                                                       v.Oid.ToString(), SnmpSharpNet.SnmpConstants.GetTypeName(v.Value.Type), v.Value.ToString()));
                                }));
                            }
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                consoleBox.Items.Add("** End of SNMP Version 2 TRAP data.");
                            }));
                        }
                    }
                }
                else
                {
                    if (inlen == 0)
                    {
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            consoleBox.Items.Add("Zero length packet received.");
                        }));
                    }
                }
            }
        }
Beispiel #2
0
        private void SNMP_RECEIVE()
        {
            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);
            bool run = true;
            int inlen = -1;
            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 = SnmpSharpNet.SnmpPacket.GetProtocolVersion(indata, inlen);
                    if (ver == (int)SnmpSharpNet.SnmpVersion.Ver1)
                    {
                        // Parse SNMP Version 1 TRAP packet 

                        SnmpSharpNet.SnmpV1TrapPacket pkt = new SnmpSharpNet.SnmpV1TrapPacket();
                        pkt.decode(indata, inlen);

                        this.Dispatcher.Invoke((Action)(() =>
                        {


                            console.Items.Add(string.Format("** SNMP Version 1 TRAP received from {0}:", inep.ToString()));
                            console.Items.Add(string.Format("*** Trap generic: {0}", translateReceiver(pkt.Pdu.Generic)));
                            console.Items.Add(string.Format("*** Trap specific: {0}", pkt.Pdu.Specific));
                            console.Items.Add(string.Format("*** Agent address: {0}", pkt.Pdu.AgentAddress.ToString()));
                            console.Items.Add(string.Format("*** Timestamp: {0}", pkt.Pdu.TimeStamp.ToString()));
                            console.Items.Add(string.Format("*** VarBind count: {0}", pkt.Pdu.VbList.Count));
                            console.Items.Add(string.Format("*** VarBind content:"));
                        }));

                        foreach (SnmpSharpNet.Vb v in pkt.Pdu.VbList)
                        {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                console.Items.Add(string.Format("**** {0} {1}: {2}", v.Oid.ToString(), SnmpSharpNet.SnmpConstants.GetTypeName(v.Value.Type), v.Value.ToString()));
                            }));
                        }
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            console.Items.Add("** End of SNMP Version 1 TRAP data.");
                        }));
                    }
                    else
                    {
                        // Parse SNMP Version 2 TRAP packet 
                        SnmpSharpNet.SnmpV2Packet pkt = new SnmpSharpNet.SnmpV2Packet();
                        pkt.decode(indata, inlen);
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            console.Items.Add(string.Format("** SNMP Version 2 TRAP received from {0}:", inep.ToString()));
                        }));
                        if ((SnmpSharpNet.PduType)pkt.Pdu.Type != SnmpSharpNet.PduType.V2Trap)
                        {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                console.Items.Add("*** NOT an SNMPv2 trap ****");
                            }));
                        }
                        else
                        {
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                console.Items.Add(string.Format("*** Community: {0}", pkt.Community.ToString()));
                                console.Items.Add(string.Format("*** VarBind count: {0}", pkt.Pdu.VbList.Count));
                                console.Items.Add("*** VarBind content:");
                            }));
                            foreach (SnmpSharpNet.Vb v in pkt.Pdu.VbList)
                            {
                                this.Dispatcher.Invoke((Action)(() =>
                                {
                                    console.Items.Add(string.Format("**** {0} {1}: {2}",
                                   v.Oid.ToString(), SnmpSharpNet.SnmpConstants.GetTypeName(v.Value.Type), v.Value.ToString()));
                                }));
                            }
                            this.Dispatcher.Invoke((Action)(() =>
                            {
                                console.Items.Add("** End of SNMP Version 2 TRAP data.");
                            }));
                        }
                    }
                }
                else
                {
                    if (inlen == 0)
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            console.Items.Add("Zero length packet received.");
                        }));
                }
            }

        }