AdventNet SNMP的实现源码

网络 网络管理
下面我们介绍了如何使用AdventNet SNMP来完成SNMP信息的获取。基于C#语言的代码编写,希望能对大家有所帮助。

SNMP协议的实现方法有很多,现在我们就来介绍一下,用AdventNet SNMP获取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();
    }
}

那么到这里用AdventNet SNMP的实现代码已经完成了。本文出自http://www.cnblogs.com/luluping/archive/2010/04/16/1713516.html

责任编辑:佟健 来源: 互联网
相关推荐

2010-07-05 16:42:39

AdventNet S

2010-07-05 10:16:31

ucd-snmpSNMP Agent

2010-05-24 18:19:44

SNMP报文

2010-08-20 12:01:02

SNMP管理框架

2010-07-12 17:23:14

2010-07-12 16:53:50

启用2003 SNMP

2010-06-30 17:34:25

SNMP Trap

2010-01-08 14:29:58

华为交换机snmp

2011-03-31 13:40:36

SNMPMRTG安装

2010-06-30 10:31:34

SNMP MIB

2010-06-29 16:53:08

2010-07-05 11:35:58

IPX协议SNMP

2010-06-29 14:17:22

SNMP协议

2010-06-29 14:48:44

SNMP Trap

2010-06-29 16:41:32

关闭SNMP服务

2010-07-08 15:24:17

SNMP trap

2010-06-28 15:28:27

SNMP协议代理

2010-06-30 16:48:16

SNMP trap

2010-07-09 12:11:31

SNMP服务

2010-07-01 14:34:47

SNMP Trap
点赞
收藏

51CTO技术栈公众号