`
zhouzaibao
  • 浏览: 294171 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

c#开发snmp应用

    博客分类:
  • snmp
阅读更多

    首先准备一个包snmpsharpnet,到这个官网上去下载http://www.snmpsharpnet.com/

    我主要关心两个方式,一个是通过snmpget方法获得,一个是通过snmpwalk方法,snmpget方法可以获得指定oid的值,snmpwalk方法可以获得一个组下面的所有key和value。

    剩下的不多说,直接贴代码吧。

 

using System;
using System.Collections.Generic;
using System.Web;
using System.Net;
using SnmpSharpNet;


/// <summary>
///SimpleSnmp 的摘要说明
/// </summary>
public class SimpleSnmp
{
	public SimpleSnmp()
	{
		//
		//TODO: 在此处添加构造函数逻辑
		//
    }

    #region 通过oid字符数组获得相应的值
    public static Dictionary<string,string> getOIDValue(string host, string[] oid) {
        //返回变量
        Dictionary<string, string> dic = new Dictionary<string, string>();

        // SNMP community name
        OctetString community = new OctetString("public");

        // Define agent parameters class
        AgentParameters param = new AgentParameters(community);
        // Set SNMP version to 1 (or 2)
        param.Version = SnmpVersion.Ver1;
        // 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, 161, 2000, 1);

        // Pdu class used for all requests
        Pdu pdu = new Pdu(PduType.Get);

        foreach (string singleoid in oid) {
            pdu.VbList.Add(singleoid);
        }

        // Make SNMP request
        SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param);

        // 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)
            {
                for (int i = 0; i < result.Pdu.VbList.Count;i++ )
                {
                    dic.Add(result.Pdu.VbList[i].Oid.ToString(), result.Pdu.VbList[i].Value.ToString());
                }
                // Reply variables are returned in the same order as they were added
                //  to the VbList
            }
        }
        target.Close();
        return dic;
    }
    #endregion

    #region 通过snmpwalk返回oid根下面的所有值
    public static Dictionary<string, string> getWalkValue(string host,string irootOid) {
        Dictionary<string, string> dic = new Dictionary<string, string>();
        // SNMP community name
        OctetString community = new OctetString("public");

        // 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.Ver2;
        // 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, 161, 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 = 5;

        // 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
            SnmpV2Packet result = (SnmpV2Packet)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;
    }
    #endregion
}

  代码基本上都是官网给出的,我觉得这两个对我来说比较有用,就整理了一下,具体的调用我想大家应该会

分享到:
评论

相关推荐

    snmp C#开发库

    总的来说,SnmpSharpNet是C#开发SNMP应用的一个强大工具,它简化了SNMP协议的复杂性,让开发者可以专注于应用程序的核心逻辑,而不是底层网络通信的细节。通过学习和使用这个库,你可以构建出功能丰富的网络管理系统...

    C#开发SNMP管理源码

    在C#中开发SNMP应用,我们需要引入相关的库,例如`System.Management`命名空间中的`ManagementObjectSearcher`类,可以用于发送SNMP请求并处理响应。但要注意,这个命名空间提供的功能相对较弱,对于更复杂的SNMP...

    C#实现snmp协议的部分功能源代码

    在C#中实现SNMP协议,可以利用.NET框架提供的System.Management命名空间,或者使用第三方库来简化开发过程。 首先,我们需要了解SNMP的基本概念: 1. SNMP版本:SNMP有三个主要版本,分别是SNMPv1、SNMPv2c和SNMPv3...

    Snmp#Net(C#版Snmp)

    - **易用性**:通过C#面向对象的特性,提供简洁的API接口,方便开发人员快速集成SNMP功能。 - **灵活性**:库提供了广泛的类和方法,可以灵活地进行SNMP操作,如Get、Set、Trap等。 - **MIB解析**:库内置了MIB...

    net-snmp,c#,收发trap,有模拟客户端和管理端,含代码

    三、C#实现SNMP应用 使用C#和net-snmp库,你可以构建一个完整的SNMP应用程序。例如,创建一个客户端可以执行以下任务: 1. 发送GET请求,获取网络设备的MIB对象值。 2. 发送SET请求,更改网络设备的配置。 3. 创建...

    C#基于SnmpSharpNet做的SNMP客户端(SNMP V1和V2版本)

    C#是微软开发的一种面向对象的编程语言,广泛用于Windows平台上的应用开发。在C#中实现SNMP客户端功能,可以借助第三方库,比如SnmpSharpNet。这个库提供了丰富的API,使得开发者能够轻松地构建SNMP请求和解析响应。...

    snmpDemo_SNMPinC#_SNMPMIB_C#的SNMP编写.zip

    "snmpDemo_SNMPinC#_SNMPMIB_C#的SNMP编写.zip" 这个标题表明我们正在处理一个关于SNMP(简单网络管理协议)的示例项目,该示例是用C#编程语言编写的,并涉及到SNMP MIB(管理信息库)。这个压缩包可能包含了一个...

    C# snmp get和set方法实现,含源码

    GET请求通常由管理站(如你的C#应用程序)发起,然后由代理(网络设备)响应。这个过程涉及SNMP协议的数据结构,如PDU(协议数据单元)和OID(对象标识符),其中OID是网络设备上每个可管理对象的唯一标识。 SET...

    SNMP协议应用程序

    开发SNMP应用程序通常涉及以下步骤: 1. 设计MIB结构:定义网络设备需要管理的对象和它们的属性。 2. 编写代理代码:实现SNMP协议的代理端,处理来自管理站的请求并返回响应。 3. 实现管理站:编写管理程序,与代理...

    snmp.rar_C#snmp_SNMP_hp snmp

    C# SNMP库则是利用.NET框架实现SNMP通信的工具,能够帮助开发者在C#环境中构建SNMP应用。 惠普的SNMP++开发包是专门为开发人员设计的一套资源,旨在简化与HP设备(及其他支持SNMP的设备)的交互过程。这个开发包...

    snmp C#上位机开发

    开发SNMP C#上位机时,需要了解以下关键知识点: 1. **SNMP版本**:SNMP有多个版本,包括SNMPv1、SNMPv2c和SNMPv3。SNMPv1和v2c安全性较低,不支持认证和加密;SNMPv3则增加了安全特性,支持身份验证和加密。 2. *...

    Snmp.rar_Csharp SNMP_SNMP_SNMP C#_c# snmp_snmp CSharp

    C#是微软开发的一种面向对象的编程语言,由于其强大的特性和丰富的库支持,它在开发网络应用程序,包括SNMP应用时,表现得尤为出色。 本示例中的"C# SNMP"项目使用了Visual Studio 2005,展示了如何在C#环境中封装...

    C#+snmp编程_SNMP

    C#是微软开发的一种面向对象的编程语言,它具有丰富的库支持,可以用于创建各种类型的应用程序,包括SNMP客户端和代理。 在C#中实现SNMP编程,主要涉及以下几个核心知识点: 1. **SNMP版本**:SNMP有三个主要版本...

    基于SNMP协议的监控应用程序

    总的来说,SNMP协议是网络管理的基础,而使用C#开发的SNMP应用程序则为网络管理员提供了一种高效、便捷的方式来监控和管理网络环境。通过深入理解和应用这些技术,可以极大地提升网络运维的效率和准确性。

    net.rar_Csharp SNMP_C#snmp_SNMP_snmp c#_网管

    在提供的"net.rar"压缩包中,可能包含的是使用C#实现的SNMP功能的源代码或者示例项目,这些资源对于学习和开发C# SNMP应用非常有价值。开发者可以深入研究这些代码,理解其工作原理,从而提升自己的技能。

    用C#做的snmp数据包捕获工具

    C#是Microsoft开发的一种面向对象的编程语言,非常适合构建桌面应用程序,包括网络工具。在这个项目中,我们将探讨如何使用C#来创建一个SNMP数据包捕获工具。 首先,我们需要理解SNMP的基本工作原理。SNMP运行在TCP...

    windows下SNMP程序开发,通过SNMP协议开发的读取程序

    - WinSNMP:Windows操作系统内置的SNMP支持,提供了开发SNMP应用程序所需的API。 - SNMP API:包括snmp.h头文件和对应的动态链接库,如winsnmp.dll,为开发者提供了接口来发送GET、SET、TRAP等请求。 - PSDK...

    SNMP.rar_SNMP_snmp 网络_winsocket

    使用C#开发SNMP应用,需要自己实现SNMP协议的报文结构和交互逻辑。SNMP协议报文分为GET、SET、TRAP等类型,每种类型都有其特定的报文格式。例如,GET请求用于获取对象的值,SET请求用于设置对象的值,而TRAP则是代理...

    SNMP开发应用(包括dotnet和使用第三方控件)

    在这个“SNMP开发应用”中,我们将探讨如何利用.NET Framework 4.0以及可能的第三方控件来实现SNMP的功能,如获取指定IP的机器名。 首先,SNMP协议主要由三部分组成:管理站(Manager)、代理(Agent)和管理信息库...

    snmp 对于vc++的开发

    4. **库选择:** 在C++中开发SNMP应用,需要一个可靠的库支持。例如,`libsnmp`是一个广泛使用的开源库,它提供了SNMP的实现和API,可以方便地集成到VC++项目中。另一个选项是Microsoft的`WinSNMP` API,它是Windows...

Global site tag (gtag.js) - Google Analytics