首页 > 其他分享 >go使用snmp库查询mib数据

go使用snmp库查询mib数据

时间:2023-11-23 10:32:23浏览次数:41  
标签:log err snmp mib SNMP session snmpgo go 请求



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

 



标签:log,err,snmp,mib,SNMP,session,snmpgo,go,请求
From: https://blog.51cto.com/u_15535797/8525366

相关文章

  • 玩转开源 | 搭建 Hugo 管理 Markdown 文档
    在工作、学习中,不可避免会要写一些文档;又或者想搭建个简单网站,记录和分享您的生活经验或知识;撰写这些文档中使用markdown是一个非常不错的选择,让我们更加聚焦在文档表达的内容上。实际上笔者的文档基本都是在Sublime中用markdown格式撰写的。在先前文章《Markdown的那些......
  • gobgp宣告bgp路由
    wgethttps://github.com/osrg/gobgp/releases/download/v3.20.0/gobgp_3.20.0_linux_amd64.tar.gz#c1和c2容器启动gobgpd守护进程#c1#gobgpd.conf[global.config]as=1002router-id="172.17.0.4"[[neighbors]][neighbors.config]peer-as=1002......
  • 基于googlenet网络的动物种类识别算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述       动物种类识别算法基于深度学习技术,尤其是卷积神经网络(CNN),如GoogleNet。这种算法的主要原理是通过学习和识别图像中的特征来预测动物的种类。        GoogleNet,也被......
  • 2023-11-22:用go语言,给你一个长度为 n 下标从 0 开始的整数数组 nums。 它包含 1 到 n
    2023-11-22:用go语言,给你一个长度为n下标从0开始的整数数组nums。它包含1到n的所有数字,请你返回上升四元组的数目。如果一个四元组(i,j,k,l)满足以下条件,我们称它是上升的:0<=i<j<k<l<n且nums[i]<nums[k]<nums[j]<nums[l]。输入:nums=[1,3,2,......
  • 原生sql(django-orm如何执行原生sql)、flask-sqlalchemy使用、flask-migrate使用、
    原生sql(django-orm如何执行原生sql)django执行原生sqlimportosos.environ.setdefault('DJANGO_SETTINGS_MODULE','djangoProject2.settings')importdjangodjango.setup()fromapp01.modelsimportBook,User#原生sql,方式一,跟对象做映射:#book_list=Book.ob......
  • golang 内存分配
    golang的内存分配思想从tcmalloc而来,思路是把对象分配成小对象减少锁的力度或无锁增加效率定义golang内部的页(Page)大小为8B空间大小golang内部把要申请或使用的空间大小分为了三大类:微对象(<16B),小对象(16B~32KB),大对象(>32KB),其中小对象又分为67种,定义在src......
  • golang 原子操作
    在golang中,有原子包,能够实现原子操作,在我分析和猜想下,感觉解开了谜团具体用法不说了,网上一大堆什么cas,add,load,store等,主要是底层实现arm架构在amd架构下,通过汇编指令加锁来实现代码在src/runtime/internal/atomic/atomic_amd64.s//uint64Xadd64(uint64volatile*va......
  • PicGo如何设置阿里云图床
    1.打开阿里云官网、注册并且登录、然后产品下拉列表里面通过搜索或者直接找到存储、对象存储OSS2.默认你已经激活了,然后进入到控制台里面。3.注意事项Bucket名称需要全英文,不能有大写字母服务器选国内,一般就近选择图床选择标准存储读写权限选择公有读4.购买存储包......
  • golang select
    golangselect是多channel并行的利器不要拿switch和select比,根本不是一个东西好嘛,差不少,只是名字稍微有点像前置操作golang对select做了一些优化select结构体为空当select里面为空的时候会直接panic只有一个case当只有一个case时候(包括只有一个case时候),......
  • Ego_planner_swarm之minimum snap(jerk)代码解释
    首先是minimumsnap的理论推导过程https://blog.csdn.net/u011341856/article/details/121861930我对他的博客的一些笔记https://pan.quark.cn/s/8549109ff930#/list/share下面就是对高飞老师egoplanner中的minimumsnap(jerk)的注释解析#include<iostream>#include<traj......