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

c# 利用snmp中OID值获取VALUE值

    博客分类:
  • snmp
 
阅读更多
using System;
using System.Collections.Generic;
using System.Text;
using SnmpSharpNet;
using System.Net;

namespace BankProject
{
    class SnmpUtil
    {
        private SimpleSnmp snmp = null;

        private Dictionary<Oid, AsnType> result = null;

        public SnmpUtil()
        {
            
        }

        public SnmpUtil(string host, string community)
        {
            host = host == "" ? ReadyAppConfig.ConfigManager("snmp_host") : host;
            community = community == "" ? ReadyAppConfig.ConfigManager("snmp_community") : community;
            snmp = new SimpleSnmp(host, community);
        }

        private bool isValid()
        {
            bool bol = true;
            if (!snmp.Valid)
            {
                bol = false;
                return bol;
            }
            return bol;
        }

        private Dictionary<Oid,AsnType> SnmpClient(string oid)
        {
            result = snmp.Walk(SnmpVersion.Ver1, oid);
            return result;
        }

        public List<object> excuteInit(SnmpDao oid)
        {
            List<object> list = null;
            if(isValid())
            {
                Dictionary<Oid,AsnType> result=SnmpClient(oid.Oid);
                if(result!=null)
                {
                    list = new List<object>();
                    foreach (KeyValuePair<Oid, AsnType> entry in result)
                    {
                        string ss = string.Format("{0}|{1}|{2}", entry.Key.ToString(), SnmpConstants.GetTypeName(entry.Value.Type),
                          entry.Value.ToString());
                        list.Add(ss);
                    }
                }
            }
            return list;
        }


    }
}

 网上下载SNMPSHARPNET第三方DLL文件,引入工程中,根据他现有的API进行测试

以下是我的DAO文件,用于存放OID值 

using System;
using System.Collections.Generic;
using System.Text;

namespace BankProject
{
    class SnmpDao
    {
        private string oid;

        public string Oid
        {
            get { return oid; }
            set { oid = value; }
        }
        
    }
}

 建一个WINFORM,测试一下

private void snmpCLientGet() 
        {
            SimpleSnmp snmp = new SimpleSnmp(host, community);
            
            if (!snmp.Valid)
            {
                Console.WriteLine("SNMP agent host name/ip address is invalid.");
                return;
            }
            //Dictionary<Oid, AsnType> result = snmp.Walk(SnmpVersion.Ver1, "1.3.6.1.2.1.25.2.3.1.4.2");
            
            Dictionary<Oid, AsnType> result = snmp.Get(SnmpVersion.Ver1, new string[] { ".1.3.6.1.2.1.25.3.2.1.3.1" });
            if (result == null)
            {
                Console.WriteLine("No results received.");
                return;
            }

            foreach (KeyValuePair<Oid, AsnType> kvp in result)
            {
                string s=string.Format("{0}= {1}: {2}", kvp.Key.ToString(), SnmpConstants.GetTypeName(kvp.Value.Type), kvp.Value.ToString());

                richTextBox1.Text =richTextBox1.Text+"\n"+s;
            }
            
        }

        private void snmpClientWalk()
        {
            SimpleSnmp snmp = new SimpleSnmp(host, community);
            Dictionary<Oid, AsnType> result = snmp.Walk(SnmpVersion.Ver1, ".1.3.6.1.2.1.25.3.5.1.1");
            if (result == null)
            {
                Console.WriteLine("Request failed.");
            }
            else
            {
                foreach (KeyValuePair<Oid, AsnType> entry in result)
                {
                    string ss = string.Format("{0} = {1}: {2}", entry.Key.ToString(), SnmpConstants.GetTypeName(entry.Value.Type),
                      entry.Value.ToString());
                    richTextBox1.Text = richTextBox1.Text + "\n" + ss;
                }
            }
        }

        private void runInfo_Click(object sender, EventArgs e)
        {

            //string func = System.Reflection.MethodBase.GetCurrentMethod().Name+"()";
            
            //this.panel3.Controls.Add(new TestControl());
            //snmpClientWalk();
            //snmpCLientGet();
            
            SnmpDao sd = new SnmpDao();
            sd.Oid = ".1.3.6.1.2.1.25.3.5.1.1";
            SnmpUtil snmp = new SnmpUtil("","");
            List<object> list=snmp.excuteInit(sd);
            foreach(string s in list)
            {
                richTextBox1.Text = richTextBox1.Text + "\n" + s;
            }
            
        }

        private void snmpSetPdu()
        {
            string community = "private";
            SimpleSnmp snmp = new SimpleSnmp(host, community);
            List<Vb> vblist = new List<Vb>();
            Oid setOid = new Oid("");
            OctetString setValue = new OctetString("");
            vblist.Add(new Vb(setOid,setValue));
            Dictionary<Oid, AsnType> result = snmp.Set(SnmpVersion.Ver1, vblist.ToArray());
            if(result==null)
            {
                Console.WriteLine("发送失败");
            }
            else 
            {
                Console.WriteLine("发送成功");
            }
        }

 经测试成功获取

但为什么有的OID只能用GET获取到,有的OID只能用WALK获取到,没有理解,哪位大神可以给俺解释下,谢谢了

0
2
分享到:
评论

相关推荐

    基于C#编写的通过OID获取SNMP

    本篇将深入探讨如何利用C#编程语言通过OID(对象标识符)获取SNMP数据。 首先,OID是SNMP中的关键元素,它是一个有序的数字串,用于唯一地标识网络中的管理对象。理解OID对于正确查询网络设备的状态至关重要。例如...

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

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

    Snmp#Net(C#版Snmp)

    - **架构**:SNMP由管理站(Manager)、代理(Agent)和管理信息库(MIB)组成,管理站通过SNMP协议向代理发送请求,获取或设置MIB对象的值。 2. SNMP版本: - **SNMPv1**:基础版本,提供基本的管理功能,但安全...

    C#SNMP_WALK举例

    ### C# 中 SNMP_WALK 代码详解 #### 一、前言 在现代网络管理中,简单网络管理协议(Simple Network Management Protocol, SNMP)是一种广泛使用的标准协议,用于收集网络设备的信息并对其进行管理。SNMP Walk 是...

    C#SNMP_SET举例

    本篇文章将详细介绍如何在C#中实现SNMP_SET功能,即通过C#代码向SNMP代理发送SET请求,以改变网络设备上的某些配置或状态值。 #### 二、代码解析 ##### 1. 引入必要的命名空间 ```csharp using System; using ...

    C#通过SNMP读取并控制PDU

    在IT行业中,SNMP(简单网络管理协议)是一种广泛用于管理网络设备的标准协议,而C#作为.NET框架下的编程语言,提供了丰富的库和工具来实现SNMP通信。本篇文章将详细探讨如何使用C#通过SNMP协议读取并控制PDU(电源...

    snmp C#开发库

    在C#编程环境中,开发SNMP应用通常需要借助特定的开发库,如"SnmpSharpNet"。这个开源的DLL库为C#开发者提供了方便的接口,以实现与SNMP兼容的设备进行通信。 SnmpSharpNet是这个开发库的名字,它是C#编写的一个...

    利用SNMP#NET做trap接收器

    NET则是.NET Framework的一个组件,允许开发者在C#等.NET语言中实现SNMP功能。 创建一个SNMP Trap接收器是网络监控系统的重要组成部分。通过接收并处理这些Trap消息,管理员可以及时了解网络状态,快速响应潜在的...

    C#简单实现SNMP的方法

    } public class SNMP { public byte[] get(string action, string ip, string community, string oid) { // SNMP PDU definition byte[] pdu = new byte[29]; // Set version, community, and type pdu[0] = 0x01; ...

    Snmpsharpnet

    3. **Variable**: `Snmpsharpnet`中的Variable类代表了SNMP变量绑定,通常是一个OID(对象标识符)和相应的值。 4. **Oid**: OID是SNMP中的关键元素,用于唯一标识网络中的管理对象。`Snmpsharpnet`提供了方便的...

    SnmpSharpNet-0-9-2-bin

    2. **SnmpSharpNet库结构**:库中的主要类包括`Snmp`、`Pdu`、`Variable`、`Oid`等。`Snmp`类是SNMP操作的核心,可以创建并发送请求;`Pdu`类封装了SNMP协议数据单元,包含了请求或响应的具体信息;`Variable`类表示...

    UDP,TCP监控实例

    在C#中,我们可以使用SNMP(简单网络管理协议)库来获取设备状态和监控特定端口。SNMP允许我们查询设备的MIB(管理信息库),从中获取端口的状态、流量等信息。例如,我们可以查询OpenNetCF库提供的SNMP类来获取端口...

Global site tag (gtag.js) - Google Analytics