はじめに
Go言語のSNMPパッケージgosnmpを紹介するシリーズの5回目です。
前回は
の記事でTRAPを受信する方法について説明しました。
今回は、TRAPを送信する方法について説明します。
TRAPを送信するプログラム
gosnmpパッケージでSNMPv2cのTRAPを送信するプログラムは
package main
import (
"log"
g "github.com/gosnmp/gosnmp"
)
func main() {
g.Default.Target = "192.168.1.250"
g.Default.Port = 162
g.Default.Community = "trap"
err := g.Default.Connect()
if err != nil {
log.Fatalf("Connect() err: %v", err)
}
defer g.Default.Conn.Close()
vbs := []g.SnmpPDU{
g.SnmpPDU{
Name: ".1.3.6.1.6.3.1.1.4.1.0",
Type: g.ObjectIdentifier,
Value: "1.3.6.1.6.3.1.1.5.1", // cloldStart
},
}
trap := g.SnmpTrap{
Variables: vbs,
}
_, err = g.Default.SendTrap(trap)
if err != nil {
log.Fatalf("SendTrap() err: %v", err)
}
}
です。
このプログラムのポイントについて説明します。
宛先を指定
g.Default.Target = "192.168.1.250"
g.Default.Port = 162
宛先のIPアドレスとポートを指定します。
TRAPの種類を指定
vbs := []g.SnmpPDU{
g.SnmpPDU{
Name: ".1.3.6.1.6.3.1.1.4.1.0",
Type: g.ObjectIdentifier,
Value: "1.3.6.1.6.3.1.1.5.1", // cloldStart
},
}
の部分でTRAPの種類を表すsnmpTrapOID.0にcoldStartを設定しています。
数値のOIDで指定していますが
の記事で紹介したパッケージを使えば名前で指定できます。
SNMPv3対応にする
先ほどのプログラムをSNMPv3対応したプログラムが
package main
import (
"fmt"
"log"
"time"
g "github.com/gosnmp/gosnmp"
)
func main() {
g.Default.Target = "192.168.1.250"
g.Default.Community = "trap"
g.Default.Port = 162
+ g.Default.Version = g.Version3
+ g.Default.SecurityModel = g.UserSecurityModel
+ g.Default.MsgFlags = g.AuthPriv
+ engineID := fmt.Sprintf("17861:%d", time.Now().Unix())
+ g.Default.SecurityParameters = &g.UsmSecurityParameters{
+ UserName: "test",
+ AuthoritativeEngineID: engineID,
+ AuthenticationProtocol: g.SHA,
+ AuthenticationPassphrase: "password",
+ PrivacyProtocol: g.AES,
+ PrivacyPassphrase: "password",
+ }
err := g.Default.Connect()
if err != nil {
log.Fatalf("Connect() err: %v", err)
}
defer g.Default.Conn.Close()
vbs := []g.SnmpPDU{
{
Name: ".1.3.6.1.6.3.1.1.4.1.0",
Type: g.ObjectIdentifier,
Value: "1.3.6.1.6.3.1.1.5.1", // cloldStart
},
}
trap := g.SnmpTrap{
Variables: vbs,
}
_, err = g.Default.SendTrap(trap)
if err != nil {
log.Fatalf("SendTrap() err: %v", err)
}
}
です。
送信結果
SNMPv2cとSNMPv3のどちらも同じ結果になります。
TWSNMP FCで受信した場合です。
余談
この方法を使ってPCのCPUやメモリーの使用率が一定以上になった時、SNMPのTRAPを送信するプログラムを開発しました。