Visual C# 2015调用SnmpSharpNet库实现简单的SNMP元素查询

一开始调研发现有几个SNMP的库,

一个是net-SNMP,这个好像是linux用的多

一个是微软自己的WinSNMP,这个没有例子,不太好操作

一个是SnmpSharpNet,这个有些例子比较好,

利用SnmpSharpNet的例子实现读取udpindatagrams的代码如下:

要将SnmpSharpNet.dll放入Visual C# 2015的工程目录下,然后,在工程浏览器的引用里添加这个dll,方法见这里,引用,右键,添加引用,浏览到dll即可

 1 using System;
 2 using System.Net;
 3 using SnmpSharpNet;
 4 
 5 namespace snmpget
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             // SNMP community name
12             OctetString community = new OctetString("public");
13 
14             // Define agent parameters class
15             AgentParameters param = new AgentParameters(community);
16             // Set SNMP version to 1 (or 2)
17             param.Version = SnmpVersion.Ver1;
18             // Construct the agent address object
19             // IpAddress class is easy to use here because
20             //  it will try to resolve constructor parameter if it doesn't
21             //  parse to an IP address
22             IpAddress agent = new IpAddress("192.168.0.10");
23 
24             // Construct target
25             UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);
26 
27             // Pdu class used for all requests
28             Pdu pdu = new Pdu(PduType.Get);
29             pdu.VbList.Add("1.3.6.1.2.1.7.1.0"); //udpindatagrams
30 
31             // Make SNMP request
32             SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param);
33 
34             // If result is null then agent didn't reply or we couldn't parse the reply.
35             if (result != null)
36             {
37                 // ErrorStatus other then 0 is an error returned by 
38                 // the Agent - see SnmpConstants for error definitions
39                 if (result.Pdu.ErrorStatus != 0)
40                 {
41                     // agent reported an error with the request
42                     Console.WriteLine("Error in SNMP reply. Error {0} index {1}",
43                         result.Pdu.ErrorStatus,
44                         result.Pdu.ErrorIndex);
45                 }
46                 else
47                 {
48                     // Reply variables are returned in the same order as they were added
49                     //  to the VbList
50                     Console.WriteLine("sysDescr({0}) ({1}): {2}",
51                         result.Pdu.VbList[0].Oid.ToString(),
52                         SnmpConstants.GetTypeName(result.Pdu.VbList[0].Value.Type),
53                         result.Pdu.VbList[0].Value.ToString());
54                 }
55             }
56             else
57             {
58                 Console.WriteLine("No response received from SNMP agent.");
59             }
60             target.Close();
61         }
62     }
63 }

 输出结果如下:

发送和接收的包的wireshark截图:

get-request

get-response

接下来,需要看如何获取网络拓扑。。。

获取拓扑,首先需要获取本地节点的所有接口

下面读取本地节点的接口数量,发现LwIP貌似只能一个mib量一个mib量的读取。

读LwIP的两个mib量就返回toobig了,难道LwIP的snmp只支持一次读一个mib量,还需确认???

            pdu.VbList.Add("1.3.6.1.2.1.7.1.0"); //udpindatagrams
            pdu.VbList.Add("1.3.6.1.2.1.2.1.0"); //ifnumber

原文地址:https://www.cnblogs.com/yanhc/p/7500669.html