testtrap.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package main
  2. import (
  3. "flag"
  4. "github.com/gosnmp/gosnmp"
  5. "log"
  6. "os"
  7. "time"
  8. )
  9. func main() {
  10. sendVersion := flag.Int("sv", 2, "Send trap version")
  11. flag.Parse()
  12. target := "47.92.151.165"
  13. var port uint16 = 9162
  14. switch *sendVersion {
  15. case 1:
  16. sendV1(target, port)
  17. case 3:
  18. sendV3(target, port)
  19. default:
  20. sendV2c(target, port)
  21. }
  22. }
  23. func sendV2c(target string, port uint16) {
  24. gosnmp.Default.Target = target
  25. gosnmp.Default.Port = port
  26. gosnmp.Default.Version = gosnmp.Version2c
  27. trap := gosnmp.SnmpTrap{
  28. Variables: getTestPdus(),
  29. }
  30. err := gosnmp.Default.Connect()
  31. if err != nil {
  32. log.Fatalf("Connect() err: %v", err)
  33. }
  34. defer gosnmp.Default.Conn.Close()
  35. _, err = gosnmp.Default.SendTrap(trap)
  36. if err != nil {
  37. log.Fatalf("SendTrap() err: %v", err)
  38. }
  39. }
  40. func sendV1(target string, port uint16) {
  41. gosnmp.Default.Target = target
  42. gosnmp.Default.Port = port
  43. gosnmp.Default.Version = gosnmp.Version1
  44. trap := gosnmp.SnmpTrap{
  45. Variables: getTestPdus(),
  46. Enterprise: ".1.3.6.1.6.3.1.1.5.1",
  47. AgentAddress: "127.0.0.1",
  48. GenericTrap: 0,
  49. SpecificTrap: 0,
  50. Timestamp: 300,
  51. }
  52. err := gosnmp.Default.Connect()
  53. if err != nil {
  54. log.Fatalf("Connect() err: %v", err)
  55. }
  56. defer gosnmp.Default.Conn.Close()
  57. _, err = gosnmp.Default.SendTrap(trap)
  58. if err != nil {
  59. log.Fatalf("SendTrap() err: %v", err)
  60. }
  61. }
  62. func sendV3(target string, port uint16) {
  63. // Default is a pointer to a GoSNMP struct that contains sensible defaults
  64. // eg port 161, community public, etc
  65. params := &gosnmp.GoSNMP{
  66. Target: target,
  67. Port: port,
  68. Version: gosnmp.Version3,
  69. Timeout: time.Duration(30) * time.Second,
  70. SecurityModel: gosnmp.UserSecurityModel,
  71. MsgFlags: gosnmp.AuthPriv,
  72. Logger: log.New(os.Stdout, "", 0),
  73. SecurityParameters: &gosnmp.UsmSecurityParameters{
  74. UserName: "user",
  75. AuthoritativeEngineID: "1234",
  76. AuthenticationProtocol: gosnmp.SHA,
  77. AuthenticationPassphrase: "password",
  78. PrivacyProtocol: gosnmp.DES,
  79. PrivacyPassphrase: "password",
  80. },
  81. }
  82. err := params.Connect()
  83. if err != nil {
  84. log.Fatalf("Connect() err: %v", err)
  85. }
  86. defer params.Conn.Close()
  87. trap := gosnmp.SnmpTrap{
  88. Variables: getTestPdus(),
  89. }
  90. _, err = params.SendTrap(trap)
  91. if err != nil {
  92. log.Fatalf("SendTrap() err: %v", err)
  93. }
  94. }
  95. func getTestPdus() []gosnmp.SnmpPDU {
  96. return []gosnmp.SnmpPDU{
  97. {
  98. Name: ".1.3.6.1.4.1.318.1.1.4.4.2.1.3.5",
  99. Type: gosnmp.Integer,
  100. Value: 100,
  101. },
  102. {
  103. Name: ".1.3.6.1.6.3.1.1.4.1.0",
  104. Type: gosnmp.ObjectIdentifier,
  105. Value: ".1.3.6.1.6.3.1.1.5.1",
  106. },
  107. {
  108. Name: "1.3.6.1.2.1.1.6",
  109. Type: gosnmp.OctetString,
  110. Value: "Oval Office",
  111. },
  112. {
  113. Name: "1.3.6.1.2.1.1.3.0",
  114. Type: gosnmp.TimeTicks,
  115. Value: uint32(time.Now().Unix()),
  116. },
  117. }
  118. }