用AdventNet SNMP API获取SNMP表信息(C#)

用AdventNet SNMP API获取SNMP表信息(C#)

用AdventNet SNMP API获取SNMP表信息(C#)

 

using System;

using adventnet.snmp.snmp2;

public class snmpget

{

    [STAThread]

    public static void Main(System.String[] args)

    {

 

        // getting the hostname and the OID from the command line

 

        // Start SNMP API

        SnmpAPI api = new SnmpAPI();

        //api.Debug = true;

 

        // Open session

        SnmpSession session = new SnmpSession(api);

        //Build GET Request PDU

        SnmpPDU pdu = new SnmpPDU();

        pdu.Community = "public";

        pdu.WriteCommunity = "jinyun888";

        System.String remoteHost = "211.101.116.112";

        UDPProtocolOptions option = new UDPProtocolOptions(remoteHost);

        pdu.ProtocolOptions = option;

        pdu.Timeout = 10000;

        pdu.Retries = 3;

        pdu.Command = adventnet.snmp.snmp2.SnmpAPI.GETNEXT_REQ_MSG;

        SnmpOID[] oids = new SnmpOID[3];

        oids[0] = new SnmpOID(".1.3.6.1.4.1.429.1.1.2.1.1.1");

        oids[1] = new SnmpOID(".1.3.6.1.4.1.429.1.1.2.1.1.3");

        oids[2] = new SnmpOID(".1.3.6.1.4.1.429.1.1.2.1.1.4");

       

        for (int i = 0; i < 3; i++)

        {

            pdu.AddNull(oids[i]);

        }

        SnmpOID rootoid = new SnmpOID(".1.3.6.1.4.1.429.1.1.2.1.1.1.");

        String root = rootoid.ToString();

        try

        {

            session.Open();

        }

        catch (SnmpException e)

        {

            System.Console.Error.WriteLine("Error opening socket: " + e);

        }

        // add OIDs

        while (true)

        // until received OID isn't in sub-tree

        {

            try

            {

                // Send PDU and receive response PDU

                pdu = session.SyncSend(pdu);

            }

            catch (SnmpException e)

            {

                System.Console.Error.WriteLine("Sending PDU" + e.Message);

                System.Environment.Exit(1);

            }

            if (pdu == null)

            {

                System.Console.Out.WriteLine("Request timed out to: " );

                System.Environment.Exit(1);

            }

            //check for out index

            if (!(pdu.GetObjectID(0).ToString().StartsWith(root)))

            {

                break;

            }

            int version = pdu.Version;

            if (version == SnmpAPI.SNMP_VERSION_1)

            {

                // check for error

                if (pdu.Errstat != 0)

                {

                    System.Console.Out.WriteLine("Error Indication in response: " + SnmpException.ExceptionString((sbyte)pdu.Errstat) + "\nErrindex: " + pdu.Errindex);

                    System.Environment.Exit(1);

                }

                // print response pdu variable-bindings                   

                System.Console.Out.WriteLine(pdu.PrintVarBinds());

            }

            else if (version == SnmpAPI.SNMP_VERSION_2C)

            {

                System.Collections.IEnumerator e = pdu.VariableBindings.GetEnumerator();

                while (e.MoveNext())

                {

                    int error = 0;

                    SnmpVarBind varbind = (SnmpVarBind)e.Current;

                    // check for error

                    if ((error = varbind.Errindex) != 0)

                    {

                        System.Console.Out.WriteLine("Error Indication in response: " + SnmpException.ExceptionString((sbyte)error));

                        System.Environment.Exit(1);

                    }

                    // print response pdu variable-bindings

                    System.Console.Out.WriteLine(pdu.PrintVarBinds());

                }

            }

            else

            {

                System.Console.Out.WriteLine("Invalid Version Number");

            }

            // set GETNEXT_REQ_MSG to do walk

            // Don't forget to set request id to 0 otherwise next request will fail

            pdu.Reqid = 0;

            pdu.Command = adventnet.snmp.snmp2.SnmpAPI.GETNEXT_REQ_MSG;

        } // end of while true

 

        // close session

        session.Close();

        //close the api thread

        api.Close();

    }

}

原文地址:https://www.cnblogs.com/luluping/p/1713516.html