本文整理汇总了C#中Oid.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# Oid.Clone方法的具体用法?C# Oid.Clone怎么用?C# Oid.Clone使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Oid
的用法示例。
在下文中一共展示了Oid.Clone方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: walk
public Dictionary<string, string> walk(UdpTarget target, string oid)
{
Dictionary<string, string> Output = new Dictionary<string, string>();
// Define Oid that is the root of the MIB
// tree you wish to retrieve
Oid rootOid = new Oid(oid); // 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.GetNext);
if (useCache == true ) {
Dictionary<string, string> data = getCache(target, oid);
if (data.Count > 0 ) {
return data;
}
}
// Loop through results
while (lastOid != null)
{
// When Pdu class is first constructed, RequestId is set to a random value
// that needs to be incremented on subsequent requests made using the
// same instance of the Pdu class.
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
SnmpV1Packet result = (SnmpV1Packet)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)
{
// agent reported an error with the request
Console.WriteLine("Error in SNMP reply. Error {0} index {1}",
result.Pdu.ErrorStatus,
result.Pdu.ErrorIndex);
lastOid = null;
break;
}
else
{
// 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))
{
/*
Console.WriteLine("{0} ({1}): {2}",
v.Oid.ToString(),
SnmpConstants.GetTypeName(v.Value.Type),
v.Value.ToString());
*/
// keep the result
Output.Add(v.Oid.ToString(), v.Value.ToString());
lastOid = v.Oid;
}
else
{
// we have reached the end of the requested
// MIB tree. Set lastOid to null and exit loop
lastOid = null;
}
}
}
}
else
{
Console.WriteLine("No response received from SNMP agent.");
}
}
if (useCache == true || overrideCache == true ) {
setCache(target, oid, Output);
}
return Output;
}
示例2: button11_Click
private void button11_Click(object sender, EventArgs e)
{
//SnmpTest snt = new SnmpTest(tbAddress.Text, "public", ".1.3.6.1.4.1.38446");
//string[] t= {".1.3.6.1.4.1.38446"};
//snt.Test();
OctetString community = new OctetString("public");
AgentParameters param = new AgentParameters(community);
param.Version = SnmpVersion.Ver2;
IpAddress agent = new IpAddress("192.168.1.120");
UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);
Pdu pdu2 = new Pdu(PduType.GetBulk);
pdu2.VbList.Add(".1.3.6.1.4.1.38446.1.1.2.1.13");
SnmpV2Packet result2 = (SnmpV2Packet)target.Request(pdu2, param);
int i=result2.Pdu.VbCount;
string str= SnmpConstants.GetTypeName(result2.Pdu.VbList[0].Value.Type);
string str2 = result2.Pdu.VbList[0].Value.ToString();
return;
// Define Oid that is the root of the MIB
// tree you wish to retrieve
Oid rootOid = new Oid(".1.3.6.1.4.1.38446.1.5.9.1.9"); // 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)
{
// agent reported an error with the request
Console.WriteLine("Error in SNMP reply. Error {0} index {1}",
result.Pdu.ErrorStatus,
result.Pdu.ErrorIndex);
lastOid = null;
break;
}
else
{
// 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))
{
Console.WriteLine("{0} ({1}): {2}",
v.Oid.ToString(),
SnmpConstants.GetTypeName(v.Value.Type),
v.Value.ToString());
lastOid = v.Oid;
//.........这里部分代码省略.........
示例3: MibWalk
/// <summary>
/// Walks an SNMP mib table displaying the results on the fly (unless otherwise desired)
/// </summary>
/// <param name="log_options">Logging options</param>
/// <param name="ip">IPAddress of device to walk</param>
/// <param name="in_community">Read-community of device to walk</param>
/// <param name="start_oid">Start OID (1.3, etc)</param>
/// <returns></returns>
public static List<SnmpV1Packet> MibWalk(LOG_OPTIONS log_options, IPAddress ip, string in_community, string start_oid)
{
stop = false;
List<SnmpV1Packet> packets = new List<SnmpV1Packet>();
// SNMP community name
OctetString community = new OctetString(in_community);
// Define agent parameters class
AgentParameters param = new AgentParameters(community);
// Set SNMP version to 1
param.Version = SnmpVersion.Ver1;
// Construct target
UdpTarget target = new UdpTarget(ip, 161, 2000, 1);
// Define Oid that is the root of the MIB
// tree you wish to retrieve
Oid rootOid = new Oid(start_oid); // 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.GetNext);
// Loop through results
while (lastOid != null)
{
// When Pdu class is first constructed, RequestId is set to a random value
// that needs to be incremented on subsequent requests made using the
// same instance of the Pdu class.
if (pdu.RequestId != 0)
{
pdu.RequestId += 1;
}
if (stop)
{
return packets;
}
// Clear Oids from the Pdu class.
pdu.VbList.Clear();
// Initialize request PDU with the last retrieved Oid
pdu.VbList.Add(lastOid);
// Make SNMP request
SnmpV1Packet result = (SnmpV1Packet)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
packets.Add(result);
if (result.Pdu.ErrorStatus != 0)
{
// agent reported an error with the request
Logger.Write(log_options, module, "Error in SNMP reply. Error " + result.Pdu.ErrorStatus + " index " + result.Pdu.ErrorIndex);
lastOid = null;
break;
}
else
{
// 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))
{
Logger.Write(log_options, module, v.Oid.ToString() + " " + SnmpConstants.GetTypeName(v.Value.Type) + ": " + v.Value.ToString());
lastOid = v.Oid;
}
else
{
// we have reached the end of the requested
// MIB tree. Set lastOid to null and exit loop
lastOid = null;
}
}
}
}
else
{
Console.WriteLine("No response received from SNMP agent.");
}
}
target.Close();
return packets;
}
示例4: getData
/// <summary>
/// Will get the rest of the variables, parts and percentages
/// </summary>
private Dictionary<String, String> getData()
{
Dictionary<String, String> dictionary = new Dictionary<String, String>();
OctetString community = new OctetString( "public" );
AgentParameters param = new AgentParameters( community );
param.Version = SnmpVersion.Ver1;
IpAddress agent = new IpAddress( printerName );
UdpTarget target = new UdpTarget( (System.Net.IPAddress)agent, 161, 2000, 1 );
Oid rootOid = new Oid( printerOID ); // ifDescr
Oid lastOid = (Oid)rootOid.Clone();
Pdu pdu = new Pdu( PduType.GetNext );
while ( lastOid != null )
{
// When Pdu class is first constructed, RequestId is set to a random value
// that needs to be incremented on subsequent requests made using the
// same instance of the Pdu class.
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
SnmpV1Packet result = null;
try
{
result = (SnmpV1Packet)target.Request( pdu, param );
}
catch
{
return null;
}
// 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 )
{
// agent reported an error with the request
Console.WriteLine( "Error in SNMP reply. Error {0} index {1}",
result.Pdu.ErrorStatus,
result.Pdu.ErrorIndex );
lastOid = null;
break;
}
else
{
// 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 ) )
{
dictionary.Add( v.Oid.ToString(), v.Value.ToString() );
lastOid = v.Oid;
}
else
{
lastOid = null;
}
}
}
}
else
{
Console.WriteLine( "No response received from SNMP agent." );
}
}
target.Close();
return dictionary;
}
示例5: GetTable
public static void GetTable()
{
Dictionary<String, Dictionary<uint, AsnType>> result = new Dictionary<String, Dictionary<uint, AsnType>>();
// Not every row has a value for every column so keep track of all columns available in the table
List<uint> tableColumns = new List<uint>();
// Prepare agent information
AgentParameters param = new AgentParameters(SnmpVersion.Ver2, new OctetString("public"));
IpAddress peer = new IpAddress("192.168.15.42");
if (!peer.Valid)
{
Console.WriteLine("Unable to resolve name or error in address for peer: {0}", "");
return;
}
UdpTarget target = new UdpTarget((IPAddress)peer);
// This is the table OID supplied on the command line
Oid startOid = new Oid("1.3.6.1.2.1.47.1.1.1");
// Each table OID is followed by .1 for the entry OID. Add it to the table OID
startOid.Add(1); // Add Entry OID to the end of the table OID
// Prepare the request PDU
Pdu bulkPdu = Pdu.GetBulkPdu();
bulkPdu.VbList.Add(startOid);
// We don't need any NonRepeaters
bulkPdu.NonRepeaters = 0;
// Tune MaxRepetitions to the number best suited to retrive the data
bulkPdu.MaxRepetitions = 100;
// Current OID will keep track of the last retrieved OID and be used as
// indication that we have reached end of table
Oid curOid = (Oid)startOid.Clone();
// Keep looping through results until end of table
while (startOid.IsRootOf(curOid))
{
SnmpPacket res = null;
try
{
res = target.Request(bulkPdu, param);
}
catch (Exception ex)
{
Console.WriteLine("Request failed: {0}", ex.Message);
target.Close();
return;
}
// For GetBulk request response has to be version 2
if (res.Version != SnmpVersion.Ver2)
{
Console.WriteLine("Received wrong SNMP version response packet.");
target.Close();
return;
}
// Check if there is an agent error returned in the reply
if (res.Pdu.ErrorStatus != 0)
{
Console.WriteLine("SNMP agent returned error {0} for request Vb index {1}",
res.Pdu.ErrorStatus, res.Pdu.ErrorIndex);
target.Close();
return;
}
// Go through the VbList and check all replies
foreach (Vb v in res.Pdu.VbList)
{
curOid = (Oid)v.Oid.Clone();
// VbList could contain items that are past the end of the requested table.
// Make sure we are dealing with an OID that is part of the table
if (startOid.IsRootOf(v.Oid))
{
// Get child Id's from the OID (past the table.entry sequence)
uint[] childOids = Oid.GetChildIdentifiers(startOid, v.Oid);
// Get the value instance and converted it to a dotted decimal
// string to use as key in result dictionary
uint[] instance = new uint[childOids.Length - 1];
Array.Copy(childOids, 1, instance, 0, childOids.Length - 1);
String strInst = InstanceToString(instance);
// Column id is the first value past <table oid>.entry in the response OID
uint column = childOids[0];
if (!tableColumns.Contains(column))
tableColumns.Add(column);
if (result.ContainsKey(strInst))
{
result[strInst][column] = (AsnType)v.Value.Clone();
}
else
{
result[strInst] = new Dictionary<uint, AsnType>();
result[strInst][column] = (AsnType)v.Value.Clone();
}
}
else
{
// We've reached the end of the table. No point continuing the loop
break;
}
}
// If last received OID is within the table, build next request
if (startOid.IsRootOf(curOid))
{
bulkPdu.VbList.Clear();
bulkPdu.VbList.Add(curOid);
bulkPdu.NonRepeaters = 0;
bulkPdu.MaxRepetitions = 100;
}
//.........这里部分代码省略.........
示例6: pobierzTabele
public Tabela pobierzTabele()
{
/*!
*Pobiera tabele SNMP.
*/
Tabela tabela1 = new Tabela();
AgentParameters param = new AgentParameters(SnmpVersion.Ver2, new OctetString(community));
IpAddress peer = new IpAddress(host);
if (!peer.Valid)
{
Console.WriteLine("Zły adres.");
//return false;
}
UdpTarget target = new UdpTarget((IPAddress)peer);
Oid startOid = new Oid("1.3.6.1.2.1.6.13");
startOid.Add(1);
Pdu bulkPdu = Pdu.GetBulkPdu();
bulkPdu.VbList.Add(startOid);
bulkPdu.NonRepeaters = 0;
bulkPdu.MaxRepetitions = 100;
Oid curOid = (Oid)startOid.Clone();
while (startOid.IsRootOf(curOid))
{
SnmpPacket res = null;
try
{
res = target.Request(bulkPdu, param);
}
catch (Exception ex)
{
Console.WriteLine("Zapytanie nieudane {0}", ex.Message);
target.Close();
//return false;
}
if (res.Version != SnmpVersion.Ver2)
{
Console.WriteLine("Otrzymano inną wersję SNMP w odpowiedzi.");
target.Close();
//return false;
}
if (res.Pdu.ErrorStatus != 0)
{
Console.WriteLine("SNMP agent zwrócił błąd {0} dla zapytania {1}", res.Pdu.ErrorStatus, res.Pdu.ErrorIndex);
target.Close();
//return false;
}
foreach (Vb v in res.Pdu.VbList)
{
curOid = (Oid)v.Oid.Clone();
if (startOid.IsRootOf(v.Oid))
{
uint[] childOids = Oid.GetChildIdentifiers(startOid, v.Oid);
uint[] instance = new uint[childOids.Length - 1];
Array.Copy(childOids, 1, instance, 0, childOids.Length - 1);
String strInst = InstanceToString(instance);
uint column = childOids[0];
if (!tabelaKolumn.Contains(column))
tabelaKolumn.Add(column);
if (slownikRezultatu.ContainsKey(strInst))
{
slownikRezultatu[strInst][column] = (AsnType)v.Value.Clone();
}
else {
slownikRezultatu[strInst] = new Dictionary<uint, AsnType>();
slownikRezultatu[strInst][column] = (AsnType)v.Value.Clone();
}
}
else {
break;
}
}
if (startOid.IsRootOf(curOid))
{
bulkPdu.VbList.Clear();
bulkPdu.VbList.Add(curOid);
bulkPdu.NonRepeaters = 0;
bulkPdu.MaxRepetitions = 100;
}
}
target.Close();
if (slownikRezultatu.Count <= 0)
{
//Console.WriteLine("Żadnych rezlutatów nie zwrócono");
//return false;
}
else {
//return true;
}
/*UFAM W TABELE, ŻE SŁOWNIK NIE ODWRÓCI KOLEJNOŚCI I WALĘ NA OŚLEP KOLEJNE WARTOŚCI*/
foreach (KeyValuePair<string, Dictionary<uint, AsnType>> kvp in slownikRezultatu)
{
int i = 0;
tabela1.tcpAddress.Add(kvp.Key);
foreach (uint kolumna in tabelaKolumn)
{
if (kvp.Value.ContainsKey(kolumna))
{
if (i == 0)
//.........这里部分代码省略.........
示例7: pobierzTabeleDoUsuniecia
public void pobierzTabeleDoUsuniecia()
{
/*!
*Pobiera tabele SNMP.
*/
Dictionary<String, Dictionary<uint, AsnType>> tabela_rezultat = new Dictionary<string, Dictionary<uint, AsnType>>();
List<uint> tabeleKolumy = new List<uint>();
AgentParameters param = new AgentParameters(SnmpVersion.Ver2, new OctetString(community));
IpAddress peer = new IpAddress(host);
if (!peer.Valid)
{
Console.WriteLine("Zły adres.");
return;
}
UdpTarget target = new UdpTarget((IPAddress)peer);
Oid startOid = new Oid("1.3.6.1.2.1.6.13");
startOid.Add(1);
//przygotowanie zapytania
Pdu bulkPdu = Pdu.GetBulkPdu();
bulkPdu.VbList.Add(startOid);
bulkPdu.NonRepeaters = 0;
bulkPdu.MaxRepetitions = 100;
Oid curOid = (Oid)startOid.Clone();
while (startOid.IsRootOf(curOid))
{
SnmpPacket res = null;
try
{
res = target.Request(bulkPdu, param);
}
catch (Exception ex)
{
Console.WriteLine("Zapytanie nieudane {0}", ex.Message);
target.Close();
return;
}
if (res.Version != SnmpVersion.Ver2)
{
Console.WriteLine("Received wrong SNMP version response packet.");
target.Close();
return;
}
if (res.Pdu.ErrorStatus != 0)
{
Console.WriteLine("SNMP agent zwrócił błąd {0} dla zapytania {1}", res.Pdu.ErrorStatus, res.Pdu.ErrorIndex);
target.Close();
return;
}
foreach (Vb v in res.Pdu.VbList)
{
curOid = (Oid)v.Oid.Clone();
if (startOid.IsRootOf(v.Oid))
{
uint[] childOids = Oid.GetChildIdentifiers(startOid, v.Oid);
uint[] instance = new uint[childOids.Length - 1];
Array.Copy(childOids, 1, instance, 0, childOids.Length - 1);
String strInst = InstanceToString(instance);
uint column = childOids[0];
if (!tabeleKolumy.Contains(column))
tabeleKolumy.Add(column);
if (tabela_rezultat.ContainsKey(strInst))
{
tabela_rezultat[strInst][column] = (AsnType)v.Value.Clone();
}
else
{
tabela_rezultat[strInst] = new Dictionary<uint, AsnType>();
tabela_rezultat[strInst][column] = (AsnType)v.Value.Clone();
}
}
else
{
break; //bo koniec tabeli ;)
}
}
if (startOid.IsRootOf(curOid))
{
bulkPdu.VbList.Clear();
bulkPdu.VbList.Add(curOid);
bulkPdu.NonRepeaters = 0;
bulkPdu.MaxRepetitions = 100;
}
target.Close();
if (tabela_rezultat.Count <= 0)
{
Console.WriteLine("Żadnych rezlutatów nie zwrócono");
}
else
{
Console.WriteLine("Instance");
foreach (uint column in tabeleKolumy)
{
Console.Write("\tColumn id {0}", column);
}
Console.WriteLine("");
foreach (KeyValuePair<string, Dictionary<uint, AsnType>> kvp in tabela_rezultat)
{
Console.Write("{0}", kvp.Key);
//.........这里部分代码省略.........
示例8: remoteCall
static void remoteCall(string[] args)
{
// 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("127.0.0.1");
// 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("1.3.6.1.2.1.2.2.1.2"); // 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)
{
// agent reported an error with the request
Console.WriteLine("Error in SNMP reply. Error {0} index {1}",
result.Pdu.ErrorStatus,
result.Pdu.ErrorIndex);
lastOid = null;
break;
}
else
{
// 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))
{
Console.WriteLine("{0} ({1}): {2}",
v.Oid.ToString(),
SnmpConstants.GetTypeName(v.Value.Type),
v.Value.ToString());
if (v.Value.Type == SnmpConstants.SMI_ENDOFMIBVIEW)
lastOid = null;
else
lastOid = v.Oid;
}
else
{
// we have reached the end of the requested
// MIB tree. Set lastOid to null and exit loop
lastOid = null;
}
}
}
}
else
{
Console.WriteLine("No response received from SNMP agent.");
}
}
//.........这里部分代码省略.........
示例9: Walk
/// <summary>SNMP WALK operation</summary>
/// <remarks>
/// When using SNMP version 1, walk is performed using GET-NEXT calls. When using SNMP version 2,
/// walk is performed using GET-BULK calls.
/// </remarks>
/// <example>Example SNMP walk operation using SNMP version 1:
/// <code>
/// String snmpAgent = "10.10.10.1";
/// String snmpCommunity = "private";
/// SimpleSnmp snmp = new SimpleSnmp(snmpAgent, snmpCommunity);
/// Dictionary<Oid, AsnType> result = snmp.Walk(SnmpVersion.Ver1, "1.3.6.1.2.1.1");
/// if( result == null ) {
/// Console.WriteLine("Request failed.");
/// } else {
/// foreach (KeyValuePair<Oid, AsnType> entry in result)
/// {
/// Console.WriteLine("{0} = {1}: {2}", entry.Key.ToString(), SnmpConstants.GetTypeName(entry.Value.Type),
/// entry.Value.ToString());
/// }
/// </code>
/// Will return:
/// <code>
/// 1.3.6.1.2.1.1.1.0 = OctetString: "Dual core Intel notebook"
/// 1.3.6.1.2.1.1.2.0 = ObjectId: 1.3.6.1.9.233233.1.1
/// 1.3.6.1.2.1.1.3.0 = TimeTicks: 0d 0h 0m 1s 420ms
/// 1.3.6.1.2.1.1.4.0 = OctetString: "[email protected]"
/// 1.3.6.1.2.1.1.5.0 = OctetString: "milans-nbook"
/// 1.3.6.1.2.1.1.6.0 = OctetString: "Developer home"
/// 1.3.6.1.2.1.1.8.0 = TimeTicks: 0d 0h 0m 0s 10ms
/// </code>
///
/// To use SNMP version 2, change snmp.Set() method call first parameter to SnmpVersion.Ver2.
/// </example>
/// <param name="version">SNMP protocol version. Acceptable values are SnmpVersion.Ver1 and
/// SnmpVersion.Ver2</param>
/// <param name="rootOid">OID to start WALK operation from. Only child OIDs of the rootOid will be
/// retrieved and returned</param>
/// <param name="tryGetBulk">this param is used to use get bulk on V2 requests</param>
/// <returns>Oid => AsnType value mappings on success, empty dictionary if no data was found or
/// null on error</returns>
public Dictionary<Oid, AsnType> Walk(bool tryGetBulk, SnmpVersion version, string rootOid)
{
if (!Valid)
{
if (!_suppressExceptions)
{
throw new SnmpException("SimpleSnmp class is not valid.");
}
return null;
}
// function only works on SNMP version 1 and SNMP version 2 requests
if (version != SnmpVersion.Ver1 && version != SnmpVersion.Ver2)
{
if (!_suppressExceptions)
{
throw new SnmpInvalidVersionException("SimpleSnmp support SNMP version 1 and 2 only.");
}
return null;
}
if (rootOid.Length < 2)
{
if (!_suppressExceptions)
{
throw new SnmpException(SnmpException.InvalidOid, "RootOid is not a valid Oid");
}
return null;
}
Oid root = new Oid(rootOid);
if (root.Length <= 0)
{
return null; // unable to parse root oid
}
Oid lastOid = (Oid)root.Clone();
Dictionary<Oid, AsnType> result = new Dictionary<Oid, AsnType>();
while (lastOid != null && root.IsRootOf(lastOid))
{
Dictionary<Oid, AsnType> val = null;
if (version == SnmpVersion.Ver1)
{
val = GetNext(version, new string[] { lastOid.ToString() });
}
else
{
if (tryGetBulk == true)
{
val = GetBulk(new string[] { lastOid.ToString() });
}
else
{
val = GetNext(version, new string[] { lastOid.ToString() });
}
}
// check that we have a result
if (val == null)
{
// error of some sort happened. abort...
return null;
}
foreach (KeyValuePair<Oid, AsnType> entry in val)
//.........这里部分代码省略.........
示例10: TestOidCollection
public static void TestOidCollection()
{
int i;
OidCollection c = new OidCollection();
Assert.Equal(0, c.Count);
Oid o0 = new Oid(SHA1_Oid, SHA1_Name);
i = c.Add(o0);
Assert.Equal(0, i);
Oid o1 = new Oid(SHA256_Oid, SHA256_Name);
i = c.Add(o1);
Assert.Equal(1, i);
Assert.Equal(2, c.Count);
Assert.Same(o0, c[0]);
Assert.Same(o1, c[1]);
Assert.Throws<ArgumentOutOfRangeException>(() => GC.KeepAlive(c[-1]));
Assert.Throws<ArgumentOutOfRangeException>(() => GC.KeepAlive(c[c.Count]));
Oid o2 = new Oid(SHA1_Oid, SHA1_Name);
i = c.Add(o2);
Assert.Equal(2, i);
// If there multiple matches, the one with the lowest index wins.
Assert.Same(o0, c[SHA1_Name]);
Assert.Same(o0, c[SHA1_Oid]);
Assert.Same(o1, c[SHA256_Name]);
Assert.Same(o1, c[SHA256_Oid]);
Oid o3 = new Oid(null, null);
i = c.Add(o3);
Assert.Equal(3, i);
Assert.Throws<ArgumentNullException>(() => GC.KeepAlive(c[null]));
Object o = c["BOGUSBOGUS"];
Assert.Null(c["BOGUSBOGUS"]);
Oid[] a = new Oid[10];
for (int j = 0; j < a.Length; j++)
{
a[j] = new Oid(null, null);
}
Oid[] a2 = (Oid[])(a.Clone());
c.CopyTo(a2, 3);
Assert.Equal(a[0], a2[0]);
Assert.Equal(a[1], a2[1]);
Assert.Equal(a[2], a2[2]);
Assert.Equal(o0, a2[3]);
Assert.Equal(o1, a2[4]);
Assert.Equal(o2, a2[5]);
Assert.Equal(o3, a2[6]);
Assert.Equal(a[7], a2[7]);
Assert.Equal(a[8], a2[8]);
Assert.Equal(a[9], a2[9]);
Assert.Throws<ArgumentNullException>(() => c.CopyTo(null, 0));
Assert.Throws<ArgumentNullException>(() => c.CopyTo(null, -1));
Assert.Throws<ArgumentOutOfRangeException>(() => c.CopyTo(a, -1));
Assert.Throws<ArgumentException>(() => c.CopyTo(a, 7));
Assert.Throws<ArgumentOutOfRangeException>(() => c.CopyTo(a, 1000));
ICollection ic = c;
Assert.Throws<ArgumentException>(() => ic.CopyTo(new Oid[4, 3], 0));
Assert.Throws<InvalidCastException>(() => ic.CopyTo(new string[100], 0));
return;
}
示例11: Vb
/// <summary>
/// Construct Vb with the supplied OID and Null value
/// </summary>
/// <param name="oid">OID</param>
public Vb(Oid oid)
: this()
{
_oid = (Oid)oid.Clone();
_value = new Null();
}