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 代理服务器。

相关推荐
一丝晨光4 天前
数值溢出保护?数值溢出应该是多少?Swift如何让整数计算溢出不抛出异常?类型最大值和最小值?
java·javascript·c++·rust·go·c·swift
陌尘(MoCheeen)5 天前
技术书籍推荐(002)
java·javascript·c++·python·go
白泽来了7 天前
字节大模型应用开发框架 Eino 全解(一)|结合 RAG 知识库案例分析框架生态
开源·go·大模型应用开发
致于数据科学家的小陈7 天前
Go 层级菜单树转 json 处理
python·go·json·菜单树·菜单权限·children
白总Server9 天前
Golang领域Beego框架的中间件开发实战
服务器·网络·websocket·网络协议·udp·go·ssl
ん贤9 天前
GoWeb开发
开发语言·后端·tcp/ip·http·https·go·goweb
纪元A梦9 天前
华为OD机试真题——荒岛求生(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
java·c语言·javascript·c++·python·华为od·go
chxii12 天前
3.2goweb框架GORM
go
42fourtytoo13 天前
从0开始建立Github个人博客(hugo&PaperMod)
运维·服务器·python·go·github
xuhe214 天前
[tldr] GO语言异常处理
go·error