package main import ( "flag" "github.com/gosnmp/gosnmp" "log" "os" "time" ) func main() { sendVersion := flag.Int("sv", 2, "Send trap version") flag.Parse() target := "47.92.151.165" var port uint16 = 9162 switch *sendVersion { case 1: sendV1(target, port) case 3: sendV3(target, port) default: sendV2c(target, port) } } func sendV2c(target string, port uint16) { gosnmp.Default.Target = target gosnmp.Default.Port = port gosnmp.Default.Version = gosnmp.Version2c trap := gosnmp.SnmpTrap{ Variables: getTestPdus(), } err := gosnmp.Default.Connect() if err != nil { log.Fatalf("Connect() err: %v", err) } defer gosnmp.Default.Conn.Close() _, err = gosnmp.Default.SendTrap(trap) if err != nil { log.Fatalf("SendTrap() err: %v", err) } } func sendV1(target string, port uint16) { gosnmp.Default.Target = target gosnmp.Default.Port = port gosnmp.Default.Version = gosnmp.Version1 trap := gosnmp.SnmpTrap{ Variables: getTestPdus(), Enterprise: ".1.3.6.1.6.3.1.1.5.1", AgentAddress: "127.0.0.1", GenericTrap: 0, SpecificTrap: 0, Timestamp: 300, } err := gosnmp.Default.Connect() if err != nil { log.Fatalf("Connect() err: %v", err) } defer gosnmp.Default.Conn.Close() _, err = gosnmp.Default.SendTrap(trap) if err != nil { log.Fatalf("SendTrap() err: %v", err) } } func sendV3(target string, port uint16) { // Default is a pointer to a GoSNMP struct that contains sensible defaults // eg port 161, community public, etc params := &gosnmp.GoSNMP{ Target: target, Port: port, Version: gosnmp.Version3, Timeout: time.Duration(30) * time.Second, SecurityModel: gosnmp.UserSecurityModel, MsgFlags: gosnmp.AuthPriv, Logger: log.New(os.Stdout, "", 0), SecurityParameters: &gosnmp.UsmSecurityParameters{ UserName: "user", AuthoritativeEngineID: "1234", AuthenticationProtocol: gosnmp.SHA, AuthenticationPassphrase: "password", PrivacyProtocol: gosnmp.DES, PrivacyPassphrase: "password", }, } err := params.Connect() if err != nil { log.Fatalf("Connect() err: %v", err) } defer params.Conn.Close() trap := gosnmp.SnmpTrap{ Variables: getTestPdus(), } _, err = params.SendTrap(trap) if err != nil { log.Fatalf("SendTrap() err: %v", err) } } func getTestPdus() []gosnmp.SnmpPDU { return []gosnmp.SnmpPDU{ { Name: ".1.3.6.1.4.1.318.1.1.4.4.2.1.3.5", Type: gosnmp.Integer, Value: 100, }, { Name: ".1.3.6.1.6.3.1.1.4.1.0", Type: gosnmp.ObjectIdentifier, Value: ".1.3.6.1.6.3.1.1.5.1", }, { Name: "1.3.6.1.2.1.1.6", Type: gosnmp.OctetString, Value: "Oval Office", }, { Name: "1.3.6.1.2.1.1.3.0", Type: gosnmp.TimeTicks, Value: uint32(time.Now().Unix()), }, } }