• go使用snmp库查询mib数据


    转载请注明出处:

      OID(Object Identifier)是一种用于标识和唯一命名管理信息库中的对象的标准方式。给定一个OID,可以确定特定的管理信息库对象,并对其进行操作。

      go语言使用snmp库中的 k-sone/snmpgo 实现相关mib查询的代码如下:

    复制代码
    package main
    
    import (
        "fmt"
        "log"
        "net"
    
        "github.com/k-sone/snmpgo"
    )
    
    func main() {
        // 创建SNMP会话
        session := snmpgo.NewSNMP(goSNMP.Version2c, 5000000, snmpgo.Default)
        err := session.Open()
        if err != nil {
            log.Fatalf("无法打开SNMP会话:%v", err)
        }
        defer session.Close()
    
        // 设置SNMP目标
        target := &snmpgo.SNMPTarget{
            Address:  "localhost",
            Port:     161,
            Community: "public",
            Version:   snmpgo.Version2c,
        }
    
        // 创建SNMP GET请求
        pdu := snmpgo.NewPdu(snmpgo.GetRequest)
        pdu.AddOid(snmpgo.MustParseOid("1.3.6.1.2.1.55.1.7.1.5"))
    
        // 发送SNMP请求
        packet, err := pdu.Marshal()
        if err != nil {
            log.Fatalf("SNMP请求封包失败:%v", err)
        }
        result, err := session.GetBulk(packet, target)
        if err != nil {
            log.Fatalf("SNMP GET请求失败:%v", err)
        }
    
        // 处理SNMP响应
        if result.ErrorStatus() != snmpgo.NoError {
            log.Fatalf("SNMP响应错误:%s", result.ErrorStatus())
        }
    
        // 解析SNMP响应
        respPdu := result.PduAtIndex(0)
        if respPdu == nil {
            log.Fatal("未收到SNMP响应")
        }
    
        // 获取系统启动时间的值
        startupTime := respPdu.VariableBindings()[0].Variable.String()
    
        fmt.Printf("系统启动时间:%s\n", startupTime)
    }
    复制代码

      上述代码中,使用了snmpgo库来进行SNMP通信。首先,创建了一个SNMP会话,并设置SNMP目标的地址、端口和共同体(community)。然后,我们创建了一个GET请求,并将要获取的OID添加到请求中。接下来,发送SNMP请求,并处理响应。如果请求成功,我们从响应中解析出系统启动时间的值并打印出来。

      请注意,在运行此示例之前,确保已经安装了 snmpgo 库(可以通过 go get github.com/k-sone/snmpgo 进行安装)以及有可用的 SNMP 代理服务器。

     

  • 相关阅读:
    Linux调试器--gdb使用
    Kotlin 预备知识
    【TestNG学习(三)套件测试】
    基于密度的聚类DBSCAN(机器学习)
    netfilter编程实例——一个简单的防火墙
    [李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】
    【Java 进阶篇】HTML DOM 事件详解
    Docker学习笔记
    wheel 包安装比较简单快捷,而 conda 安装相对复杂
    嵌入式 程序调试之gdb和gdbserver的交叉编译及使用
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/17773468.html