Go 连接snmp获取数据
使用Go语言可以来连接snmp,监控开放snmp服务的主机的数据。使用的第三方包为gosnmp
安装
go get "github.com/alouca/gosnmp"
# 或者使用gopm
gopm get -v -g -u "github.com/alouca/gosnmp"
使用实例
简单使用:
package main
import (
"github.com/alouca/gosnmp"
"fmt"
)
func main() {
# 连接
s, err := gosnmp.NewGoSNMP("192.168.3.111:161", "public", gosnmp.Version2c, 5)
if err != nil {
fmt.Println(err.Error())
}
# get 方式获取数据
resp, err := s.Get(".1.3.6.1.2.1.1.1.0")
if err == nil {
for _, v := range resp.Variables {
fmt.Print(v.Name + " --> ")
fmt.Println(v.Value)
}
} else {
fmt.Println(err.Error())
}
}
输出结果
$ go run test.go
.1.3.6.1.2.1.1.1.0 --> Linux localhost.localdomain 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64
snmp oid中不但了Get方式的获取,还有一种Walk,返回一串数据。
walk方式
package main
import (
"github.com/alouca/gosnmp"
"fmt"
)
func main() {
s, err := gosnmp.NewGoSNMP("192.168.3.111:161", "public", gosnmp.Version2c, 5)
if err != nil {
fmt.Println(err.Error())
}
# walk 方式获取数据
result, err := s.Walk(".1.3.6.1.2.1.2.2.1.2")
if err == nil {
for _, v := range result {
fmt.Print(v.Name + " --> ")
fmt.Println(v.Value)
}
}
}
输出:
$ go run src/test.go
.1.3.6.1.2.1.2.2.1.2.1 --> lo
.1.3.6.1.2.1.2.2.1.2.2 --> ens32
Last updated
Was this helpful?