博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Visual C# 2015调用SnmpSharpNet库实现简单的SNMP元素查询
阅读量:6825 次
发布时间:2019-06-26

本文共 3026 字,大约阅读时间需要 10 分钟。

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

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

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

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

利用实现读取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 name12             OctetString community = new OctetString("public");13 14             // Define agent parameters class15             AgentParameters param = new AgentParameters(community);16             // Set SNMP version to 1 (or 2)17             param.Version = SnmpVersion.Ver1;18             // Construct the agent address object19             // IpAddress class is easy to use here because20             //  it will try to resolve constructor parameter if it doesn't21             //  parse to an IP address22             IpAddress agent = new IpAddress("192.168.0.10");23 24             // Construct target25             UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);26 27             // Pdu class used for all requests28             Pdu pdu = new Pdu(PduType.Get);29             pdu.VbList.Add("1.3.6.1.2.1.7.1.0"); //udpindatagrams30 31             // Make SNMP request32             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 definitions39                 if (result.Pdu.ErrorStatus != 0)40                 {41                     // agent reported an error with the request42                     Console.WriteLine("Error in SNMP reply. Error {0} index {1}",43                         result.Pdu.ErrorStatus,44                         result.Pdu.ErrorIndex);45                 }46                 else47                 {48                     // Reply variables are returned in the same order as they were added49                     //  to the VbList50                     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             else57             {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

你可能感兴趣的文章