master
go 93 lines 2.08 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package snmputils
4
5 import (
6 "fmt"
7 "strings"
8
9 "github.com/gosnmp/gosnmp"
10 )
11
12 func ParseSNMPVersion(version string) gosnmp.SnmpVersion {
13 switch version {
14 case "0", "1":
15 return gosnmp.Version1
16 case "2", "2c", "":
17 return gosnmp.Version2c
18 case "3":
19 return gosnmp.Version3
20 default:
21 return gosnmp.Version2c
22 }
23 }
24
25 func ParseSNMPv3SecurityLevel(level string) gosnmp.SnmpV3MsgFlags {
26 switch level {
27 case "1", "none", "noAuthNoPriv", "":
28 return gosnmp.NoAuthNoPriv
29 case "2", "authNoPriv":
30 return gosnmp.AuthNoPriv
31 case "3", "authPriv":
32 return gosnmp.AuthPriv
33 default:
34 return gosnmp.NoAuthNoPriv
35 }
36 }
37
38 func ParseSNMPv3AuthProtocol(protocol string) gosnmp.SnmpV3AuthProtocol {
39 switch protocol {
40 case "1", "none", "noAuth", "":
41 return gosnmp.NoAuth
42 case "2", "md5":
43 return gosnmp.MD5
44 case "3", "sha":
45 return gosnmp.SHA
46 case "4", "sha224":
47 return gosnmp.SHA224
48 case "5", "sha256":
49 return gosnmp.SHA256
50 case "6", "sha384":
51 return gosnmp.SHA384
52 case "7", "sha512":
53 return gosnmp.SHA512
54 default:
55 return gosnmp.NoAuth
56 }
57 }
58
59 func ParseSNMPv3PrivProtocol(protocol string) gosnmp.SnmpV3PrivProtocol {
60 switch protocol {
61 case "1", "none", "noPriv", "":
62 return gosnmp.NoPriv
63 case "2", "des":
64 return gosnmp.DES
65 case "3", "aes":
66 return gosnmp.AES
67 case "4", "aes192":
68 return gosnmp.AES192
69 case "5", "aes256":
70 return gosnmp.AES256
71 case "6", "aes192c":
72 return gosnmp.AES192C
73 case "7", "aes256c":
74 return gosnmp.AES256C
75 default:
76 return gosnmp.NoPriv
77 }
78 }
79
80 func SnmpClientConnInfo(c gosnmp.Handler) string {
81 var info strings.Builder
82 info.WriteString(fmt.Sprintf("hostname='%s',port='%d',snmp_version='%s'", c.Target(), c.Port(), c.Version()))
83 switch c.Version() {
84 case gosnmp.Version1, gosnmp.Version2c:
85 info.WriteString(fmt.Sprintf(",community='%s'", c.Community()))
86 case gosnmp.Version3:
87 info.WriteString(fmt.Sprintf(",security_level='%d,%s'", c.MsgFlags(), c.SecurityParameters().Description()))
88 if ctx := c.ContextName(); ctx != "" {
89 info.WriteString(fmt.Sprintf(",context_name='%s'", ctx))
90 }
91 }
92 return info.String()
93 }