gosnmp

Форк
0
97 строк · 2.4 Кб
1
// Copyright 2023 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
/*
6
The developer of the trapserver code (https://github.com/jda) says "I'm working
7
on the best level of abstraction but I'm able to receive traps from a Cisco
8
switch and Net-SNMP".
9

10
Pull requests welcome.
11
*/
12

13
package main
14

15
import (
16
	"flag"
17
	"fmt"
18
	"log"
19
	"net"
20
	"os"
21
	"path/filepath"
22

23
	g "github.com/gosnmp/gosnmp"
24
)
25

26
var secParamsList = []*g.UsmSecurityParameters{
27
	{
28
		UserName:                 "myuser",
29
		AuthenticationProtocol:   g.MD5,
30
		AuthenticationPassphrase: "mypassword",
31
		PrivacyProtocol:          g.AES,
32
		PrivacyPassphrase:        "myprivacy",
33
	},
34
	{
35
		UserName:                 "myuser2",
36
		AuthenticationProtocol:   g.SHA,
37
		AuthenticationPassphrase: "mypassword2",
38
		PrivacyProtocol:          g.DES,
39
		PrivacyPassphrase:        "myprivacy2",
40
	},
41
	{
42
		UserName:                 "myuser2",
43
		AuthenticationProtocol:   g.MD5,
44
		AuthenticationPassphrase: "mypassword2",
45
		PrivacyProtocol:          g.AES,
46
		PrivacyPassphrase:        "myprivacy2",
47
	},
48
}
49

50
func main() {
51
	flag.Usage = func() {
52
		fmt.Printf("Usage:\n")
53
		fmt.Printf("   %s\n", filepath.Base(os.Args[0]))
54
		flag.PrintDefaults()
55
	}
56

57
	tl := g.NewTrapListener()
58
	tl.OnNewTrap = myTrapHandler
59

60
	usmTable := g.NewSnmpV3SecurityParametersTable(g.NewLogger(log.New(os.Stdout, "", 0)))
61
	for _, sp := range secParamsList {
62
		err := usmTable.Add(sp.UserName, sp)
63
		if err != nil {
64
			usmTable.Logger.Print(err)
65
		}
66
	}
67

68
	gs := &g.GoSNMP{
69
		Port:                        161,
70
		Transport:                   "udp",
71
		Version:                     g.Version3, // Always using version3 for traps, only option that works with all SNMP versions simultaneously
72
		SecurityModel:               g.UserSecurityModel,
73
		SecurityParameters:          &g.UsmSecurityParameters{AuthoritativeEngineID: "12345"}, // Use for server's engine ID
74
		TrapSecurityParametersTable: usmTable,
75
	}
76
	tl.Params = gs
77
	tl.Params.Logger = g.NewLogger(log.New(os.Stdout, "", 0))
78

79
	err := tl.Listen("0.0.0.0:9162")
80
	if err != nil {
81
		log.Panicf("error in listen: %s", err)
82
	}
83
}
84

85
func myTrapHandler(packet *g.SnmpPacket, addr *net.UDPAddr) {
86
	log.Printf("got trapdata from %s\n", addr.IP)
87
	for _, v := range packet.Variables {
88
		switch v.Type {
89
		case g.OctetString:
90
			b := v.Value.([]byte)
91
			fmt.Printf("OID: %s, string: %x\n", v.Name, b)
92

93
		default:
94
			log.Printf("trap: %+v\n", v)
95
		}
96
	}
97
}
98

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.