zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    递归和迭代
    The Rose
    读周国平作品有感
    matlab最小二乘法数据拟合函数详解
    读周国平作品有感
    three.js之创建一条直线
    three.js之创建一个几何体
    Go语言标准库之strconv
    Go语言基础之网络编程
    Go语言基础之并发
  • 原文地址:https://www.cnblogs.com/yanhc/p/7500669.html
Copyright © 2011-2022 走看看