在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:gosnmp/gosnmp开源软件地址:https://github.com/gosnmp/gosnmp开源编程语言:Go 98.4%开源软件介绍:gosnmpGoSNMP is an SNMP client library fully written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4 and IPv6, using SNMPv1, SNMPv2c or SNMPv3. Builds are tested against linux/amd64 and linux/386. Aboutgosnmp was started by Andreas Louca, then completely rewritten by Sonia Hamilton (2012-2020), and now ownership has been transferred to the community at gosnmp/gosnmp. For support and help, join us in the #snmp channel of Gophers Slack. OverviewGoSNMP has the following SNMP functions:
GoSNMP has the following helper functions:
gosnmp/gosnmp has completely diverged from alouca/gosnmp, your code will require modification in these (and other) locations:
type LoggerInterface interface {
Print(v ...interface{})
Printf(format string, v ...interface{})
} To enable logging, you must call gosnmp.NewLogger() function, and pass a pointer to your logging interface, for example with standard *log.Logger: gosnmp.Default.Logger = gosnmp.NewLogger(log.New(os.Stdout, "", 0)) or g := &gosnmp.GoSNMP{
...
Logger: gosnmp.NewLogger(log.New(os.Stdout, "", 0)),
} You can completely remove the logging code from your application using the golang build tag "gosnmp_nodebug", for example:
This will completely disable the logging of the gosnmp library, even if the logger interface is specified in the code. This provides a small performance improvement. Installationgo get github.com/gosnmp/gosnmp Documentationhttps://pkg.go.dev/github.com/gosnmp/gosnmp UsageHere is // Default is a pointer to a GoSNMP struct that contains sensible defaults
// eg port 161, community public, etc
g.Default.Target = "192.168.1.10"
err := g.Default.Connect()
if err != nil {
log.Fatalf("Connect() err: %v", err)
}
defer g.Default.Conn.Close()
oids := []string{"1.3.6.1.2.1.1.4.0", "1.3.6.1.2.1.1.7.0"}
result, err2 := g.Default.Get(oids) // Get() accepts up to g.MAX_OIDS
if err2 != nil {
log.Fatalf("Get() err: %v", err2)
}
for i, variable := range result.Variables {
fmt.Printf("%d: oid: %s ", i, variable.Name)
// the Value of each variable returned by Get() implements
// interface{}. You could do a type switch...
switch variable.Type {
case g.OctetString:
bytes := variable.Value.([]byte)
fmt.Printf("string: %s\n", string(bytes))
default:
// ... or often you're just interested in numeric values.
// ToBigInt() will return the Value as a BigInt, for plugging
// into your calculations.
fmt.Printf("number: %d\n", g.ToBigInt(variable.Value))
}
} Running this example gives the following output (from my printer): % go run example.go
0: oid: 1.3.6.1.2.1.1.4.0 string: Administrator
1: oid: 1.3.6.1.2.1.1.7.0 number: 104
MIB ParserI don't have any plans to write a mib parser. Others have suggested https://github.com/sleepinggenius2/gosmi ContributionsContributions are welcome, especially ones that have packet captures (see below). If you've never contributed to a Go project before, here is an example workflow.
Packet CapturesCreate your packet captures in the following way: Expected output, obtained via an snmp command. For example: % snmpget -On -v2c -c public 203.50.251.17 1.3.6.1.2.1.1.7.0 \
1.3.6.1.2.1.2.2.1.2.6 1.3.6.1.2.1.2.2.1.5.3
.1.3.6.1.2.1.1.7.0 = INTEGER: 78
.1.3.6.1.2.1.2.2.1.2.6 = STRING: GigabitEthernet0
.1.3.6.1.2.1.2.2.1.5.3 = Gauge32: 4294967295 A packet capture, obtained while running the snmpget. For example: sudo tcpdump -s 0 -i eth0 -w foo.pcap host 203.50.251.17 and port 161 BugsRane's document SNMP: Simple? Network Management Protocol was useful when learning the SNMP protocol. Please create an issue on Github with packet captures (upload capture to Google Drive, Dropbox, or similar) containing samples of missing BER types, or of any other bugs you find. If possible, please include 2 or 3 examples of the missing/faulty BER type. The following BER types have been implemented:
Running the TestsLocal testing in Docker docker build -t gosnmp/gosnmp:latest .
docker run -it gosnmp/gosnmp:latest or export GOSNMP_TARGET=1.2.3.4
export GOSNMP_PORT=161
export GOSNMP_TARGET_IPV4=1.2.3.4
export GOSNMP_PORT_IPV4=161
export GOSNMP_TARGET_IPV6='0:0:0:0:0:ffff:102:304'
export GOSNMP_PORT_IPV6=161
go test -v -tags all # for example
go test -v -tags helper # for example Tests are grouped as follows:
The generic end-to-end integration test Mocks were generated using:
However they're currently removed, as they were breaking linting. To profile cpu usage: go test -cpuprofile cpu.out
go test -c
go tool pprof gosnmp.test cpu.out To profile memory usage: go test -memprofile mem.out
go test -c
go tool pprof gosnmp.test mem.out To check test coverage: go get github.com/axw/gocov/gocov
go get github.com/matm/gocov-html
gocov test github.com/gosnmp/gosnmp | gocov-html > gosnmp.html && firefox gosnmp.html & LicenseParts of the code are taken from the Golang project (specifically some functions for unmarshaling BER responses), which are under the same terms and conditions as the Go language. The rest of the code is under a BSD license. See the LICENSE file for more details. The remaining code is Copyright 2012 the GoSNMP Authors - see AUTHORS.md for a list of authors. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论