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 代理服务器。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2019-10-18 Mockito 的用法