首先准备一个包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
}
代码基本上都是官网给出的,我觉得这两个对我来说比较有用,就整理了一下,具体的调用我想大家应该会
分享到:
相关推荐
总的来说,SnmpSharpNet是C#开发SNMP应用的一个强大工具,它简化了SNMP协议的复杂性,让开发者可以专注于应用程序的核心逻辑,而不是底层网络通信的细节。通过学习和使用这个库,你可以构建出功能丰富的网络管理系统...
在C#中开发SNMP应用,我们需要引入相关的库,例如`System.Management`命名空间中的`ManagementObjectSearcher`类,可以用于发送SNMP请求并处理响应。但要注意,这个命名空间提供的功能相对较弱,对于更复杂的SNMP...
在C#中实现SNMP协议,可以利用.NET框架提供的System.Management命名空间,或者使用第三方库来简化开发过程。 首先,我们需要了解SNMP的基本概念: 1. SNMP版本:SNMP有三个主要版本,分别是SNMPv1、SNMPv2c和SNMPv3...
- **易用性**:通过C#面向对象的特性,提供简洁的API接口,方便开发人员快速集成SNMP功能。 - **灵活性**:库提供了广泛的类和方法,可以灵活地进行SNMP操作,如Get、Set、Trap等。 - **MIB解析**:库内置了MIB...
三、C#实现SNMP应用 使用C#和net-snmp库,你可以构建一个完整的SNMP应用程序。例如,创建一个客户端可以执行以下任务: 1. 发送GET请求,获取网络设备的MIB对象值。 2. 发送SET请求,更改网络设备的配置。 3. 创建...
C#是微软开发的一种面向对象的编程语言,广泛用于Windows平台上的应用开发。在C#中实现SNMP客户端功能,可以借助第三方库,比如SnmpSharpNet。这个库提供了丰富的API,使得开发者能够轻松地构建SNMP请求和解析响应。...
"snmpDemo_SNMPinC#_SNMPMIB_C#的SNMP编写.zip" 这个标题表明我们正在处理一个关于SNMP(简单网络管理协议)的示例项目,该示例是用C#编程语言编写的,并涉及到SNMP MIB(管理信息库)。这个压缩包可能包含了一个...
GET请求通常由管理站(如你的C#应用程序)发起,然后由代理(网络设备)响应。这个过程涉及SNMP协议的数据结构,如PDU(协议数据单元)和OID(对象标识符),其中OID是网络设备上每个可管理对象的唯一标识。 SET...
开发SNMP应用程序通常涉及以下步骤: 1. 设计MIB结构:定义网络设备需要管理的对象和它们的属性。 2. 编写代理代码:实现SNMP协议的代理端,处理来自管理站的请求并返回响应。 3. 实现管理站:编写管理程序,与代理...
C# SNMP库则是利用.NET框架实现SNMP通信的工具,能够帮助开发者在C#环境中构建SNMP应用。 惠普的SNMP++开发包是专门为开发人员设计的一套资源,旨在简化与HP设备(及其他支持SNMP的设备)的交互过程。这个开发包...
开发SNMP C#上位机时,需要了解以下关键知识点: 1. **SNMP版本**:SNMP有多个版本,包括SNMPv1、SNMPv2c和SNMPv3。SNMPv1和v2c安全性较低,不支持认证和加密;SNMPv3则增加了安全特性,支持身份验证和加密。 2. *...
C#是微软开发的一种面向对象的编程语言,由于其强大的特性和丰富的库支持,它在开发网络应用程序,包括SNMP应用时,表现得尤为出色。 本示例中的"C# SNMP"项目使用了Visual Studio 2005,展示了如何在C#环境中封装...
C#是微软开发的一种面向对象的编程语言,它具有丰富的库支持,可以用于创建各种类型的应用程序,包括SNMP客户端和代理。 在C#中实现SNMP编程,主要涉及以下几个核心知识点: 1. **SNMP版本**:SNMP有三个主要版本...
总的来说,SNMP协议是网络管理的基础,而使用C#开发的SNMP应用程序则为网络管理员提供了一种高效、便捷的方式来监控和管理网络环境。通过深入理解和应用这些技术,可以极大地提升网络运维的效率和准确性。
在提供的"net.rar"压缩包中,可能包含的是使用C#实现的SNMP功能的源代码或者示例项目,这些资源对于学习和开发C# SNMP应用非常有价值。开发者可以深入研究这些代码,理解其工作原理,从而提升自己的技能。
C#是Microsoft开发的一种面向对象的编程语言,非常适合构建桌面应用程序,包括网络工具。在这个项目中,我们将探讨如何使用C#来创建一个SNMP数据包捕获工具。 首先,我们需要理解SNMP的基本工作原理。SNMP运行在TCP...
- WinSNMP:Windows操作系统内置的SNMP支持,提供了开发SNMP应用程序所需的API。 - SNMP API:包括snmp.h头文件和对应的动态链接库,如winsnmp.dll,为开发者提供了接口来发送GET、SET、TRAP等请求。 - PSDK...
使用C#开发SNMP应用,需要自己实现SNMP协议的报文结构和交互逻辑。SNMP协议报文分为GET、SET、TRAP等类型,每种类型都有其特定的报文格式。例如,GET请求用于获取对象的值,SET请求用于设置对象的值,而TRAP则是代理...
在这个“SNMP开发应用”中,我们将探讨如何利用.NET Framework 4.0以及可能的第三方控件来实现SNMP的功能,如获取指定IP的机器名。 首先,SNMP协议主要由三部分组成:管理站(Manager)、代理(Agent)和管理信息库...
4. **库选择:** 在C++中开发SNMP应用,需要一个可靠的库支持。例如,`libsnmp`是一个广泛使用的开源库,它提供了SNMP的实现和API,可以方便地集成到VC++项目中。另一个选项是Microsoft的`WinSNMP` API,它是Windows...