gosnmp

Форк
0
116 строк · 2.7 Кб
1
// Copyright 2020 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
package main
6

7
import (
8
	"fmt"
9
	"log"
10
	"net"
11
	"time"
12

13
	gosnmp "github.com/gosnmp/gosnmp"
14
)
15

16
func main() {
17
	log.Println("Starting")
18

19
	var port uint16 = 2162
20
	go Start(fmt.Sprintf("tcp://0.0.0.0:%d", port))
21

22
	gosnmp.Default.Target = "127.0.0.1"
23
	gosnmp.Default.Transport = "tcp"
24
	gosnmp.Default.Port = port
25
	gosnmp.Default.Community = "public"
26
	gosnmp.Default.Version = gosnmp.Version1
27
	time.Sleep(time.Duration(1) * time.Second)
28

29
	oid := gosnmp.SnmpPDU{
30
		Name:  "1.3.6.1.2.1.1.6",
31
		Type:  gosnmp.ObjectIdentifier,
32
		Value: "1.3.6.1.2.1.1.6.10",
33
	}
34
	oid1 := gosnmp.SnmpPDU{
35
		Name:  "1.3.6.1.2.1.1.7",
36
		Type:  gosnmp.OctetString,
37
		Value: "Testing TCP trap...",
38
	}
39
	oid2 := gosnmp.SnmpPDU{
40
		Name:  "1.3.6.1.2.1.1.8",
41
		Type:  gosnmp.Integer,
42
		Value: 123,
43
	}
44

45
	cou := 5
46
	for cou > 0 {
47
		time.Sleep(time.Duration(1) * time.Second)
48
		err := gosnmp.Default.Connect()
49
		if err != nil {
50
			log.Fatal(err)
51
		}
52
		defer gosnmp.Default.Conn.Close()
53
		//RebuildCron()
54
		log.Printf("Running (%d)\n", cou)
55

56
		trap := gosnmp.SnmpTrap{
57
			Variables:    []gosnmp.SnmpPDU{oid, oid1, oid2},
58
			Enterprise:   ".1.3.6.1.6.3.1.1.5.1",
59
			AgentAddress: "127.0.0.1",
60
			GenericTrap:  0,
61
			SpecificTrap: 0,
62
			Timestamp:    300,
63
		}
64
		_, err = gosnmp.Default.SendTrap(trap)
65
		if err != nil {
66
			log.Fatalf("SendTrap() err: %v\n", err)
67
		}
68

69
		cou--
70
	}
71
	//time.Sleep(time.Duration(10) * time.Second)
72

73
	log.Println("Stop...")
74
}
75

76
// Start SNMP server
77
func Start(address string) {
78

79
	log.Printf("Starting SNMP TRAP Server on: %s\n", address)
80
	tl := gosnmp.NewTrapListener()
81
	tl.OnNewTrap = myTrapHandlerTCP
82
	tl.Params = gosnmp.Default
83

84
	err := tl.Listen(address)
85
	if err != nil {
86
		time.Sleep(1 * time.Second)
87
		log.Fatalf("Error in TRAP listen: %s\n", err)
88
	}
89
}
90

91
func myTrapHandlerTCP(packet *gosnmp.SnmpPacket, addr *net.UDPAddr) {
92
	log.Printf("SNMP trap received from: %s:%d. Community:%s, SnmpVersion:%s\n",
93
		addr.IP, addr.Port, packet.Community, packet.Version)
94
	for i, variable := range packet.Variables {
95
		var val string
96
		switch variable.Type {
97
		case gosnmp.OctetString:
98
			val = string(variable.Value.([]byte))
99
		case gosnmp.ObjectIdentifier:
100
			val = fmt.Sprintf("%s", variable.Value)
101
		case gosnmp.TimeTicks:
102
			a := gosnmp.ToBigInt(variable.Value)
103
			val = fmt.Sprintf("%d", (*a).Int64())
104
		case gosnmp.Null:
105
			val = ""
106
		default:
107
			// ... or often you're just interested in numeric values.
108
			// ToBigInt() will return the Value as a BigInt, for plugging
109
			// into your calculations.
110
			a := gosnmp.ToBigInt(variable.Value)
111
			val = fmt.Sprintf("%d", (*a).Int64())
112
		}
113
		log.Printf("- oid[%d]: %s (%s) = %v \n", i, variable.Name, variable.Type, val)
114

115
	}
116
}
117

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

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

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

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