您的位置:首页 > 编程语言 > C#

用AdventNet SNMP API获取SNMP表信息(C#)

2010-04-16 13:42 330 查看
用AdventNet SNMP API获取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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: