-
Notifications
You must be signed in to change notification settings - Fork 46
/
sender.go
123 lines (107 loc) · 2.54 KB
/
sender.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package snmptest
import (
"testing"
"github.com/k-sone/snmpgo"
)
type TrapSender struct {
t *testing.T
Address string
}
func NewTrapSender(t *testing.T, address string) *TrapSender {
return &TrapSender{t: t, Address: address}
}
func (t *TrapSender) SendV2TrapWithBindings(trap bool, community string, v snmpgo.VarBinds) {
snmp, err := snmpgo.NewSNMP(snmpgo.SNMPArguments{
Version: snmpgo.V2c,
Address: t.Address,
Network: "udp4",
Retries: 1,
Community: community,
})
if err != nil {
// Failed to create SNMP object
t.t.Fatal(err)
return
}
if err = snmp.Open(); err != nil {
// Failed to open connection
t.t.Fatal(err)
return
}
defer snmp.Close()
if trap {
err = snmp.V2Trap(v)
} else {
err = snmp.InformRequest(v)
}
if err != nil {
// Failed to request
t.t.Fatal(err)
return
}
}
func (t *TrapSender) SendV3TrapWithBindings(v snmpgo.VarBinds, l snmpgo.SecurityLevel, eid string, eBoots, eTime int) {
snmp, err := snmpgo.NewSNMP(snmpgo.SNMPArguments{
Version: snmpgo.V3,
Address: t.Address,
Network: "udp4",
Retries: 1,
UserName: "MyName",
SecurityLevel: l,
AuthPassword: "aaaaaaaa",
AuthProtocol: snmpgo.Sha,
PrivPassword: "bbbbbbbb",
PrivProtocol: snmpgo.Aes,
SecurityEngineId: eid,
})
if err != nil {
// Failed to create SNMP object
t.t.Fatal(err)
return
}
if err = snmp.Open(); err != nil {
// Failed to open connection
t.t.Fatal(err)
return
}
defer snmp.Close()
err = snmp.V2TrapWithBootsTime(v, eBoots, eTime)
if err != nil {
// Failed to request
t.t.Fatal(err)
return
}
}
// NewTrapServer creates a new Trap Server & Serve
func NewTrapServer(address string, listener snmpgo.TrapListener) *snmpgo.TrapServer {
s, _ := snmpgo.NewTrapServer(snmpgo.ServerArguments{
LocalAddr: address,
})
s.AddSecurity(&snmpgo.SecurityEntry{
Version: snmpgo.V2c,
Community: "public",
})
s.AddSecurity(&snmpgo.SecurityEntry{
Version: snmpgo.V3,
UserName: "MyName",
SecurityLevel: snmpgo.AuthPriv,
AuthPassword: "aaaaaaaa",
AuthProtocol: snmpgo.Sha,
PrivPassword: "bbbbbbbb",
PrivProtocol: snmpgo.Aes,
SecurityEngineId: "8000000004736e6d70676f",
})
s.AddSecurity(&snmpgo.SecurityEntry{
Version: snmpgo.V3,
UserName: "MyName",
SecurityLevel: snmpgo.NoAuthNoPriv,
SecurityEngineId: "8000000004736e6d70676f5f6e6f61757468",
})
ch := make(chan struct{}, 0)
go func() {
ch <- struct{}{}
s.Serve(listener)
}()
<-ch
return s
}