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