add: snmpV3 with ipv6
This commit is contained in:
@@ -61,8 +61,8 @@ snmpServer:
|
|||||||
#engineID: "800007db03360102101101"
|
#engineID: "800007db03360102101101"
|
||||||
engineID: "8000000004323030313a6462383a3a39313636"
|
engineID: "8000000004323030313a6462383a3a39313636"
|
||||||
trapPort: 34958
|
trapPort: 34958
|
||||||
trapListen: true
|
trapListen: false
|
||||||
trapBool: true
|
trapBool: false
|
||||||
trapTick: 60
|
trapTick: 60
|
||||||
timeOut: 5
|
timeOut: 5
|
||||||
trapTarget: "2001:db8::9219"
|
trapTarget: "2001:db8::9219"
|
||||||
|
|||||||
22
sshsvc/setHLRServiceState
Normal file
22
sshsvc/setHLRServiceState
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
1)
|
||||||
|
echo -n "Set HLR state link down ... "
|
||||||
|
snmpset -v3 -l noAuthNoPriv -u manager 192.168.2.219:34957 .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 i 1 >/dev/null
|
||||||
|
echo "done"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo -n "Set HLR state link up ... "
|
||||||
|
snmpset -v3 -l noAuthNoPriv -u manager 192.168.2.219:34957 .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 i 2 >/dev/null
|
||||||
|
echo "done"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
echo -n "Set HLR state authentication failure ... "
|
||||||
|
snmpset -v3 -l noAuthNoPriv -u manager 192.168.2.219:34957 .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 i 3 >/dev/null
|
||||||
|
echo "done"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown state ($1)"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gosnmp/gosnmp"
|
||||||
g "github.com/gosnmp/gosnmp"
|
g "github.com/gosnmp/gosnmp"
|
||||||
"github.com/slayercat/GoSNMPServer"
|
"github.com/slayercat/GoSNMPServer"
|
||||||
"github.com/slayercat/GoSNMPServer/mibImps"
|
"github.com/slayercat/GoSNMPServer/mibImps"
|
||||||
@@ -33,7 +34,12 @@ type SNMPService struct {
|
|||||||
|
|
||||||
ListenHost string
|
ListenHost string
|
||||||
TrapHost string
|
TrapHost string
|
||||||
|
|
||||||
|
SysName string
|
||||||
SysDescr string
|
SysDescr string
|
||||||
|
SysLocation string
|
||||||
|
SysContact string
|
||||||
|
SysStatus string
|
||||||
SysService int
|
SysService int
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +141,39 @@ func (s *SNMPService) StartSNMPServer() {
|
|||||||
func (s *SNMPService) handleOIDs() []*GoSNMPServer.PDUValueControlItem {
|
func (s *SNMPService) handleOIDs() []*GoSNMPServer.PDUValueControlItem {
|
||||||
customOIDs := []*GoSNMPServer.PDUValueControlItem{
|
customOIDs := []*GoSNMPServer.PDUValueControlItem{
|
||||||
{
|
{
|
||||||
OID: "1.3.6.1.2.1.1.1.0",
|
OID: "1.3.6.1.4.1.1379.2.3.3.3.1.1.1.0",
|
||||||
|
Type: g.OctetString,
|
||||||
|
OnGet: func() (value interface{}, err error) {
|
||||||
|
return s.SysName, nil
|
||||||
|
},
|
||||||
|
OnSet: func(value interface{}) error {
|
||||||
|
// 将[]uint8转换为string
|
||||||
|
if v, ok := value.([]uint8); ok {
|
||||||
|
s.SysName = string(v)
|
||||||
|
log.Printf("Set request for OID 1.3.6.1.4.1.1379.2.3.3.3.1.1.1.0 with value %v", s.SysName)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.2.0",
|
||||||
|
Type: g.OctetString,
|
||||||
|
OnGet: func() (value interface{}, err error) {
|
||||||
|
return s.SysStatus, nil
|
||||||
|
},
|
||||||
|
OnSet: func(value interface{}) error {
|
||||||
|
// 将[]uint8转换为string
|
||||||
|
if v, ok := value.([]uint8); ok {
|
||||||
|
s.SysStatus = string(v)
|
||||||
|
log.Printf("Set request for OID 1.3.6.1.4.1.1379.2.3.3.3.1.1.2.0 with value %v", s.SysStatus)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.3.0",
|
||||||
Type: g.OctetString,
|
Type: g.OctetString,
|
||||||
OnGet: func() (value interface{}, err error) {
|
OnGet: func() (value interface{}, err error) {
|
||||||
return s.SysDescr, nil
|
return s.SysDescr, nil
|
||||||
@@ -144,30 +182,61 @@ func (s *SNMPService) handleOIDs() []*GoSNMPServer.PDUValueControlItem {
|
|||||||
// 将[]uint8转换为string
|
// 将[]uint8转换为string
|
||||||
if v, ok := value.([]uint8); ok {
|
if v, ok := value.([]uint8); ok {
|
||||||
s.SysDescr = string(v)
|
s.SysDescr = string(v)
|
||||||
log.Printf("Set request for OID 1.3.6.1.2.1.1.1.0 with value %v", s.SysDescr)
|
log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.3.0 with value %v", s.SysDescr)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
OID: "1.3.6.1.2.1.1.3.0",
|
OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.4.0",
|
||||||
|
Type: g.OctetString,
|
||||||
|
OnGet: func() (value interface{}, err error) {
|
||||||
|
return s.SysLocation, nil
|
||||||
|
},
|
||||||
|
OnSet: func(value interface{}) error {
|
||||||
|
// 将[]uint8转换为string
|
||||||
|
if v, ok := value.([]uint8); ok {
|
||||||
|
s.SysLocation = string(v)
|
||||||
|
log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.4.0 with value %v", s.SysLocation)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.5.0",
|
||||||
|
Type: g.OctetString,
|
||||||
|
OnGet: func() (value interface{}, err error) {
|
||||||
|
return s.SysContact, nil
|
||||||
|
},
|
||||||
|
OnSet: func(value interface{}) error {
|
||||||
|
// 将[]uint8转换为string
|
||||||
|
if v, ok := value.([]uint8); ok {
|
||||||
|
s.SysContact = string(v)
|
||||||
|
log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.5.0 with value %v", s.SysContact)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.7.0",
|
||||||
Type: g.TimeTicks,
|
Type: g.TimeTicks,
|
||||||
OnGet: func() (value interface{}, err error) {
|
OnGet: func() (value interface{}, err error) {
|
||||||
return uint32(time.Now().Unix()), nil
|
return uint32(time.Now().Unix()), nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
OID: "1.3.6.1.2.1.1.7.0",
|
OID: ".1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0",
|
||||||
Type: g.Integer,
|
Type: g.Integer,
|
||||||
OnGet: func() (value interface{}, err error) {
|
OnGet: func() (value interface{}, err error) {
|
||||||
return s.SysService, nil
|
return s.SysService, nil
|
||||||
},
|
},
|
||||||
OnSet: func(value interface{}) error {
|
OnSet: func(value interface{}) error {
|
||||||
// 将[]uint8转换为string
|
|
||||||
if v, ok := value.(int); ok {
|
if v, ok := value.(int); ok {
|
||||||
s.SysService = v
|
s.SysService = v
|
||||||
log.Printf("Set request for OID 1.3.6.1.2.1.1.7.0 with value %v", s.SysService)
|
log.Printf("Set request for OID .1.3.6.1.4.1.1379.2.3.3.3.1.1.9.0 with value %v", s.SysService)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -311,27 +380,38 @@ func (s *SNMPService) SendPeriodicTraps(gs *g.GoSNMP) {
|
|||||||
|
|
||||||
// 1. 设备链路连接失败时发送Trap (LinkDown)
|
// 1. 设备链路连接失败时发送Trap (LinkDown)
|
||||||
func (s *SNMPService) sendLinkDownTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) {
|
func (s *SNMPService) sendLinkDownTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) {
|
||||||
|
err := gs.Connect()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Connect() err: %v", err)
|
||||||
|
}
|
||||||
|
defer gs.Conn.Close()
|
||||||
|
|
||||||
trap := g.SnmpTrap{
|
trap := g.SnmpTrap{
|
||||||
Variables: []g.SnmpPDU{
|
Variables: []g.SnmpPDU{
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.2.1.2.2.1.1", // ifIndex
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.1", // linkDown
|
||||||
|
Type: g.OctetString,
|
||||||
|
Value: ".1.3.6.1.4.1.1379.2.3.3.3.3.1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.1.1", // ifIndex
|
||||||
Type: g.Integer,
|
Type: g.Integer,
|
||||||
Value: ifIndex,
|
Value: ifIndex,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.2.1.2.2.1.2", // ifDescr
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.1.2", // ifDescr
|
||||||
Type: g.OctetString,
|
Type: g.OctetString,
|
||||||
Value: ifDescr,
|
Value: ifDescr,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.6.3.1.1.5.3", // linkDown
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.4", // severity OID
|
||||||
Type: g.ObjectIdentifier,
|
Type: gosnmp.Integer,
|
||||||
Value: ".1.3.6.1.6.3.1.1.5.3",
|
Value: 2, // event
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := gs.SendTrap(trap)
|
_, err = gs.SendTrap(trap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error sending LinkDown trap: %s", err)
|
log.Printf("error sending LinkDown trap: %s", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -341,27 +421,38 @@ func (s *SNMPService) sendLinkDownTrap(gs *g.GoSNMP, ifIndex int, ifDescr string
|
|||||||
|
|
||||||
// 2. 设备链路恢复正常时发送Trap (LinkUp)
|
// 2. 设备链路恢复正常时发送Trap (LinkUp)
|
||||||
func (s *SNMPService) sendLinkUpTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) {
|
func (s *SNMPService) sendLinkUpTrap(gs *g.GoSNMP, ifIndex int, ifDescr string) {
|
||||||
|
err := gs.Connect()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Connect() err: %v", err)
|
||||||
|
}
|
||||||
|
defer gs.Conn.Close()
|
||||||
|
|
||||||
trap := g.SnmpTrap{
|
trap := g.SnmpTrap{
|
||||||
Variables: []g.SnmpPDU{
|
Variables: []g.SnmpPDU{
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.2.1.2.2.1.1", // ifIndex
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.2", // linkUp
|
||||||
|
Type: g.OctetString,
|
||||||
|
Value: ".1.3.6.1.4.1.1379.2.3.3.3.3.2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.2.1", // ifIndex
|
||||||
Type: g.Integer,
|
Type: g.Integer,
|
||||||
Value: ifIndex,
|
Value: ifIndex,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.2.1.2.2.1.2", // ifDescr
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.2.2", // ifDescr
|
||||||
Type: g.OctetString,
|
Type: g.OctetString,
|
||||||
Value: ifDescr,
|
Value: ifDescr,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.6.3.1.1.5.4", // linkUp
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.4", // severity OID
|
||||||
Type: g.ObjectIdentifier,
|
Type: gosnmp.Integer,
|
||||||
Value: ".1.3.6.1.6.3.1.1.5.4",
|
Value: 5, // event
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := gs.SendTrap(trap)
|
_, err = gs.SendTrap(trap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error sending LinkUp trap: %s", err)
|
log.Printf("error sending LinkUp trap: %s", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -371,27 +462,38 @@ func (s *SNMPService) sendLinkUpTrap(gs *g.GoSNMP, ifIndex int, ifDescr string)
|
|||||||
|
|
||||||
// 3. 设备鉴权失败时发送Trap (AuthenticationFailure)
|
// 3. 设备鉴权失败时发送Trap (AuthenticationFailure)
|
||||||
func (s *SNMPService) sendAuthFailureTrap(gs *g.GoSNMP, username, descr string) {
|
func (s *SNMPService) sendAuthFailureTrap(gs *g.GoSNMP, username, descr string) {
|
||||||
|
err := gs.Connect()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Connect() err: %v", err)
|
||||||
|
}
|
||||||
|
defer gs.Conn.Close()
|
||||||
|
|
||||||
trap := g.SnmpTrap{
|
trap := g.SnmpTrap{
|
||||||
Variables: []g.SnmpPDU{
|
Variables: []g.SnmpPDU{
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.6.3.1.1.5.5", // authenticationFailure
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.3", // authenticationFailure
|
||||||
Type: g.ObjectIdentifier,
|
Type: g.OctetString,
|
||||||
Value: ".1.3.6.1.6.3.1.1.5.5",
|
Value: ".1.3.6.1.4.1.1379.2.3.3.3.3.3",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.4.1.2021.251.1", // 自定义OID,用于记录失败的用户名
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.3.1", // 自定义OID,用于记录失败的用户名
|
||||||
Type: g.OctetString,
|
Type: g.OctetString,
|
||||||
Value: username,
|
Value: username,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: ".1.3.6.1.4.1.2021.252.1", // 自定义OID,用于记录描述
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.3.3.2", // 自定义OID,用于记录描述
|
||||||
Type: g.OctetString,
|
Type: g.OctetString,
|
||||||
Value: descr,
|
Value: descr,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: ".1.3.6.1.4.1.1379.2.3.3.3.4", // severity OID
|
||||||
|
Type: gosnmp.Integer,
|
||||||
|
Value: 4, // event
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := gs.SendTrap(trap)
|
_, err = gs.SendTrap(trap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error sending AuthenticationFailure trap: %s", err)
|
log.Printf("error sending AuthenticationFailure trap: %s", err)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -157,7 +157,11 @@ func main() {
|
|||||||
|
|
||||||
ListenHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.ListenPort)),
|
ListenHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.ListenPort)),
|
||||||
TrapHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.TrapPort)),
|
TrapHost: conf.SNMPServer.ListenAddr + ":" + strconv.Itoa(int(conf.SNMPServer.TrapPort)),
|
||||||
SysDescr: "HLR server",
|
SysName: "HLR-0",
|
||||||
|
SysStatus: "Normal",
|
||||||
|
SysDescr: "HLR server(sysNO=0)",
|
||||||
|
SysLocation: "Shanghai",
|
||||||
|
SysContact: "",
|
||||||
SysService: 0,
|
SysService: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user