func ScrapeTarget(target string, config *Module) ([]gosnmp.SnmpPDU, error) { // Set the options. snmp := gosnmp.GoSNMP{} snmp.Retries = 3 snmp.MaxRepetitions = 25 snmp.Timeout = time.Second * 60 snmp.Target = target snmp.Port = 161 if host, port, err := net.SplitHostPort(target); err == nil { snmp.Target = host p, err := strconv.Atoi(port) if err != nil { return nil, fmt.Errorf("Error converting port number to int for target %s: %s", target, err) } snmp.Port = uint16(p) } // Configure auth. config.configureSNMP(&snmp) // Do the actual walk. err := snmp.Connect() if err != nil { return nil, fmt.Errorf("Error connecting to target %s: %s", target, err) } defer snmp.Conn.Close() result := []gosnmp.SnmpPDU{} for _, subtree := range config.Walk { var pdus []gosnmp.SnmpPDU if snmp.Version == gosnmp.Version1 { pdus, err = snmp.WalkAll(subtree) } else { pdus, err = snmp.BulkWalkAll(subtree) } if err != nil { return nil, fmt.Errorf("Error walking target %s: %s", snmp.Target, err) } result = append(result, pdus...) } return result, nil }