gosnmp
81 строка · 1.9 Кб
1// Copyright 2012 The GoSNMP Authors. All rights reserved. Use of this
2// source code is governed by a BSD-style license that can be found in the
3// LICENSE file.
4
5// This program demonstrates BulkWalk.
6package main
7
8import (
9"flag"
10"fmt"
11"log"
12"os"
13"path/filepath"
14"time"
15
16"github.com/gosnmp/gosnmp"
17)
18
19func main() {
20flag.Usage = func() {
21fmt.Printf("Usage:\n")
22fmt.Printf(" %s [-community=<community>] host [oid]\n", filepath.Base(os.Args[0]))
23fmt.Printf(" host - the host to walk/scan\n")
24fmt.Printf(" oid - the MIB/Oid defining a subtree of values\n\n")
25flag.PrintDefaults()
26}
27
28var community string
29flag.StringVar(&community, "community", "public", "the community string for device")
30
31flag.Parse()
32
33if len(flag.Args()) < 1 {
34flag.Usage()
35os.Exit(1)
36}
37target := flag.Args()[0]
38var oid string
39if len(flag.Args()) > 1 {
40oid = flag.Args()[1]
41}
42
43gosnmp.Default.Target = target
44gosnmp.Default.Transport = "tcp"
45gosnmp.Default.Community = community
46gosnmp.Default.Timeout = time.Duration(10 * time.Second) // Timeout better suited to walking
47gosnmp.Default.Logger = gosnmp.NewLogger(log.New(os.Stdout, "", 0))
48err := gosnmp.Default.Connect()
49if err != nil {
50fmt.Printf("Connect err: %v\n", err)
51os.Exit(1)
52}
53defer gosnmp.Default.Conn.Close()
54
55err = gosnmp.Default.BulkWalk(oid, printValue)
56if err != nil {
57fmt.Printf("Walk Error: %v\n", err)
58os.Exit(1)
59}
60
61// This may lead to the remote server closing the TCP connection
62time.Sleep(15 * time.Second)
63err = gosnmp.Default.BulkWalk(oid, printValue)
64if err != nil {
65fmt.Printf("Walk Error: %v\n", err)
66os.Exit(1)
67}
68}
69
70func printValue(pdu gosnmp.SnmpPDU) error {
71fmt.Printf("%s = ", pdu.Name)
72
73switch pdu.Type {
74case gosnmp.OctetString:
75b := pdu.Value.([]byte)
76fmt.Printf("STRING: %s\n", string(b))
77default:
78fmt.Printf("TYPE %d: %d\n", pdu.Type, gosnmp.ToBigInt(pdu.Value))
79}
80return nil
81}
82