public string get(string ip, string oid) { Pdu pdu = new Pdu(PduType.Get); pdu.VbList.Add(oid); OctetString community = new OctetString("public"); AgentParameters param = new AgentParameters(community); param.Version = SnmpVersion.Ver1; { IpAddress agent = new IpAddress(ip); UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1); SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param); if (result != null) { if (result.Pdu.ErrorStatus != 0) { return string.Format("Error in SNMP reply. Error {0} index {1} \r\n", result.Pdu.ErrorStatus, result.Pdu.ErrorIndex); } else { return result.Pdu.VbList[0].Value.ToString(); } } else { return string.Format("No response received from SNMP agent. \r\n"); } target.Dispose(); } }
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; } 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.Dispose(); }
/// <summary> /// WALk方法 /// </summary> /// <param name="Ip_OID">ip-oid</param> /// <param name="outinfo">输出到那个字典</param> public void SnmpWalk(Dictionary<string, List<string>> Ip_OID, Dictionary<string, Dictionary<string, string>> outinfo) { foreach (string address in Ip_OID.Keys) { Dictionary<string, string> Info = new Dictionary<string, string>(); try { { Pdu pdu = new Pdu(PduType.Get); foreach (string a in Ip_OID[address]) { pdu.VbList.Add(a); } OctetString community = new OctetString("public"); AgentParameters param = new AgentParameters(community); param.Version = SnmpVersion.Ver2; IpAddress agent = new IpAddress(address); UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1); SnmpV2Packet result = (SnmpV2Packet)target.Request(pdu, param); if (result != null) { if (result.Pdu.ErrorStatus != 0) { Console.WriteLine("Error in SNMP reply. Error {0} index {1} \r\n", result.Pdu.ErrorStatus, result.Pdu.ErrorIndex); } else { for (int i = 0; i < pdu.VbCount; i++) { Info.Add(result.Pdu.VbList[i].Oid.ToString(), result.Pdu.VbList[i].Value.ToString()); } if (outinfo.ContainsKey(address) == false) { outinfo.Add(address, Info); } else { outinfo[address] = Info; } } } else { Console.WriteLine("No response received from SNMP agent. \r\n"); msg.SaveTempMessage("", DateTime.Now.ToString(), "No response received from SNMP agent. \r\n"); } target.Dispose(); } } catch (Exception ex) { msg.SaveTempMessage(ex.Source.ToString(), ex.Message.ToString(), DateTime.Now.ToString()); } } }