前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分享一个go开发的SNMP服务

分享一个go开发的SNMP服务

作者头像
fensnote
发布2022-06-27 14:46:06
6650
发布2022-06-27 14:46:06
举报

GoSNMPServer是一个不错的开源工具,使用go开发,跨平台,可以很方便移植到各个平台上运行,之前用客户端一直是用的net-snmp,最近需要用到snmp的服务端(代理),net-snmp里的snmpd交叉编译有点麻烦,后来编译出来了,结果还用不了…… 这个go开发的snmpserver是个不错的选择。

码云地址: https://gitee.com/wwhai/GoSNMPServer?_from=gitee_search

GoSNMPServer is an SNMP server library fully written in Go. It provides Server Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IPv6, using SNMPv2c or SNMPv3. Builds are tested against linux/amd64 and linux/386.

TL;DR

Build your own SNMP Server, try this:

代码语言:javascript
复制
go install github.com/slayercat/GoSNMPServer/cmd/gosnmpserver$(go env GOPATH)/bin/gosnmpserver run-server
snmpwalk -v 3 -l authPriv  -n public -u testuser   -a md5 -A testauth -x des -X testpriv 127.0.0.1:1161 1

Quick Start

代码语言:javascript
复制
import "github.com/slayercat/gosnmp"
import "github.com/slayercat/GoSNMPServer"
import "github.com/slayercat/GoSNMPServer/mibImps"
代码语言:javascript
复制
master := GoSNMPServer.MasterAgent{
    Logger: GoSNMPServer.NewDefaultLogger(),
    SecurityConfig: GoSNMPServer.SecurityConfig{
        AuthoritativeEngineBoots: 1,
        Users: []gosnmp.UsmSecurityParameters{
            {
                UserName:                 c.String("v3Username"),
                AuthenticationProtocol:   gosnmp.MD5,
                PrivacyProtocol:          gosnmp.DES,
                AuthenticationPassphrase: c.String("v3AuthenticationPassphrase"),
                PrivacyPassphrase:        c.String("v3PrivacyPassphrase"),
            },
        },
    },
    SubAgents: []*GoSNMPServer.SubAgent{
        {
            CommunityIDs: []string{c.String("community")},
            OIDs:         mibImps.All(),
        },
    },
}
server := GoSNMPServer.NewSNMPServer(master)
err := server.ListenUDP("udp", "127.0.0.1:1161")
if err != nil {
    logger.Errorf("Error in listen: %+v", err)
}
server.ServeForever()

Serve your own oids

This library provides some common oid for use. See mibImps for code, See [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ViU674o-1655102817857)(https://godoc.org/github.com/slayercat/GoSNMPServe/mibImpsr?status.png)] here.

Append GoSNMPServer.PDUValueControlItem to your SubAgent OIDS:

代码语言:javascript
复制
{
    OID:      fmt.Sprintf("1.3.6.1.2.1.2.2.1.1.%d", ifIndex),
    Type:     gosnmp.Integer,
    OnGet:    func() (value interface{}, err error) { return GoSNMPServer.Asn1IntegerWrap(ifIndex), nil },
    Document: "ifIndex",
},

Supports Types: See RFC-2578 FOR SMI

  • Integer
  • OctetString
  • ObjectIdentifier
  • IPAddress
  • Counter32
  • Gauge32
  • TimeTicks
  • Counter64
  • Uinteger32
  • OpaqueFloat
  • OpaqueDouble

Could use wrap function for detect type error. See GoSNMPServer.Asn1IntegerWrap / GoSNMPServer.Asn1IntegerUnwrap and so on.

Thanks

This library is based on soniah/gosnmp for encoder / decoders. (made a fork for maintenance)

附海思平台的编译脚本:

代码语言:javascript
复制
最近更新#!/bin/shexport CC=arm-hisiv500-linux-gccexport GOOS=linuxexport GOARCH=armexport GOARM=7export CGO_ENABLED=1go build

Quick Start

源码作者不是我,我只是搬运工~。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TL;DR
  • Quick Start
  • Serve your own oids
  • Thanks
  • Quick Start
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档