0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語のSNMPパッケージgosnmpでTRAPを受信する方法

Posted at

はじめに

Go言語のSNMPパッケージgosnmpを紹介するシリーズの4回目です。

1回目は

です。

今回は、TRAPを受信する方法です。

TRAPを受信するプログラム

TRAPを受信するプログラムは

package main

import (
	"log"
	"net"

	g "github.com/gosnmp/gosnmp"
)

func main() {
	tl := g.NewTrapListener()
	tl.Params = &g.GoSNMP{}
	tl.OnNewTrap = func(s *g.SnmpPacket, u *net.UDPAddr) {
		log.Printf("snmp trap from=%s trap=%+v", u.IP.String(), s)
	}
	err := tl.Listen("0.0.0.0:162")
	if err != nil {
		log.Fatalln(err)
	}
}

これだけで、SNMPv2のTRAPを受信できます。

リスナーの作成

tl := g.NewTrapListener()

でTRAPのリスナーを作成します。

パラメーター設定

tl.Params = &g.GoSNMP{}

パラメータをSNMP v3用に設定すれば、SNMPv3のTRAPも受信できます。

受信関数の設定

TRAPを受信した時に呼ばれる関数を設定します。

tl.OnNewTrap = func(s *g.SnmpPacket, u *net.UDPAddr) {
		log.Printf("snmp trap from=%s trap=%+v", u.IP.String(), s)
	}

受信したTRAPパケットと、TRAPの送信元の情報が関数のパラメータです。

受信結果

2024/09/23 17:26:36 snmp trap from=192.168.1.210 trap=&{Version:2c MsgFlags:NoAuthNoPriv SecurityModel:SnmpV3SecurityModel(0) SecurityParameters:<nil> ContextEngineID: ContextName: Community:public PDUType:SNMPv2Trap MsgID:0 RequestID:932629191 MsgMaxSize:0 Error:NoError ErrorIndex:0 NonRepeaters:0 MaxRepetitions:0 Variables:[{Value:45384 Name:.1.3.6.1.2.1.1.3.0 Type:TimeTicks} {Value:.1.3.6.1.4.1.8072.4.0.2 Name:.1.3.6.1.6.3.1.1.4.1.0 Type:ObjectIdentifier} {Value:.1.3.6.1.4.1.8072.4 Name:.1.3.6.1.6.3.1.1.4.3.0 Type:ObjectIdentifier}] Logger:{logger:<nil>} SnmpTrap:{Variables:[] IsInform:false Enterprise: AgentAddress: GenericTrap:0 SpecificTrap:0 Timestamp:0}}
2024/09/23 17:26:36 snmp trap from=192.168.1.210 trap=&{Version:2c MsgFlags:NoAuthNoPriv SecurityModel:SnmpV3SecurityModel(0) SecurityParameters:<nil> ContextEngineID: ContextName: Community:public PDUType:SNMPv2Trap MsgID:0 RequestID:296096074 MsgMaxSize:0 Error:NoError ErrorIndex:0 NonRepeaters:0 MaxRepetitions:0 Variables:[{Value:4 Name:.1.3.6.1.2.1.1.3.0 Type:TimeTicks} {Value:.1.3.6.1.6.3.1.1.5.1 Name:.1.3.6.1.6.3.1.1.4.1.0 Type:ObjectIdentifier} {Value:.1.3.6.1.4.1.8072.3.2.10 Name:.1.3.6.1.6.3.1.1.4.3.0 Type:ObjectIdentifier}] Logger:{logger:<nil>} SnmpTrap:{Variables:[] IsInform:false Enterprise: AgentAddress: GenericTrap:0 SpecificTrap:0 Timestamp:0}}
2024/09/23 17:27:08 snmp trap from=10.30.1.11 trap=&{Version:2c MsgFlags:NoAuthNoPriv SecurityModel:SnmpV3SecurityModel(0) SecurityParameters:<nil> ContextEngineID: ContextName: Community:public PDUType:SNMPv2Trap MsgID:0 RequestID:4400 MsgMaxSize:0 Error:NoError ErrorIndex:0 NonRepeaters:0 MaxRepetitions:0 Variables:[{Value:150700508 Name:.1.3.6.1.2.1.1.3.0 Type:TimeTicks} {Value:.1.3.6.1.4.1.9.9.131.2.0.1 Name:.1.3.6.1.6.3.1.1.4.1.0 Type:ObjectIdentifier} {Value:[7 232 9 23 17 27 12 0 43 9 0] Name:.1.3.6.1.4.1.9.9.131.1.1.1.0 Type:OctetString}] Logger:{logger:<nil>} SnmpTrap:{Variables:[] IsInform:false Enterprise: AgentAddress: GenericTrap:0 SpecificTrap:0 Timestamp:0}}

受信したTRAPの数値のOIDは、

の記事で紹介した方法を使って名前に変換できます。

TRAPの受信ができない時

以下の記事が参考になると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?