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获取到,没有理解,哪位大神可以给俺解释下,谢谢了
相关推荐
本篇将深入探讨如何利用C#编程语言通过OID(对象标识符)获取SNMP数据。 首先,OID是SNMP中的关键元素,它是一个有序的数字串,用于唯一地标识网络中的管理对象。理解OID对于正确查询网络设备的状态至关重要。例如...
在C#中实现SNMP协议,可以利用.NET框架提供的System.Management命名空间,或者使用第三方库来简化开发过程。 首先,我们需要了解SNMP的基本概念: 1. SNMP版本:SNMP有三个主要版本,分别是SNMPv1、SNMPv2c和SNMPv3...
- **架构**:SNMP由管理站(Manager)、代理(Agent)和管理信息库(MIB)组成,管理站通过SNMP协议向代理发送请求,获取或设置MIB对象的值。 2. SNMP版本: - **SNMPv1**:基础版本,提供基本的管理功能,但安全...
### C# 中 SNMP_WALK 代码详解 #### 一、前言 在现代网络管理中,简单网络管理协议(Simple Network Management Protocol, SNMP)是一种广泛使用的标准协议,用于收集网络设备的信息并对其进行管理。SNMP Walk 是...
本篇文章将详细介绍如何在C#中实现SNMP_SET功能,即通过C#代码向SNMP代理发送SET请求,以改变网络设备上的某些配置或状态值。 #### 二、代码解析 ##### 1. 引入必要的命名空间 ```csharp using System; using ...
在IT行业中,SNMP(简单网络管理协议)是一种广泛用于管理网络设备的标准协议,而C#作为.NET框架下的编程语言,提供了丰富的库和工具来实现SNMP通信。本篇文章将详细探讨如何使用C#通过SNMP协议读取并控制PDU(电源...
在C#编程环境中,开发SNMP应用通常需要借助特定的开发库,如"SnmpSharpNet"。这个开源的DLL库为C#开发者提供了方便的接口,以实现与SNMP兼容的设备进行通信。 SnmpSharpNet是这个开发库的名字,它是C#编写的一个...
NET则是.NET Framework的一个组件,允许开发者在C#等.NET语言中实现SNMP功能。 创建一个SNMP Trap接收器是网络监控系统的重要组成部分。通过接收并处理这些Trap消息,管理员可以及时了解网络状态,快速响应潜在的...
} 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; ...
3. **Variable**: `Snmpsharpnet`中的Variable类代表了SNMP变量绑定,通常是一个OID(对象标识符)和相应的值。 4. **Oid**: OID是SNMP中的关键元素,用于唯一标识网络中的管理对象。`Snmpsharpnet`提供了方便的...
2. **SnmpSharpNet库结构**:库中的主要类包括`Snmp`、`Pdu`、`Variable`、`Oid`等。`Snmp`类是SNMP操作的核心,可以创建并发送请求;`Pdu`类封装了SNMP协议数据单元,包含了请求或响应的具体信息;`Variable`类表示...
在C#中,我们可以使用SNMP(简单网络管理协议)库来获取设备状态和监控特定端口。SNMP允许我们查询设备的MIB(管理信息库),从中获取端口的状态、流量等信息。例如,我们可以查询OpenNetCF库提供的SNMP类来获取端口...