snmpgo

package module
v0.0.0-...-363211f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2017 License: MIT Imports: 24 Imported by: 0

README

snmpgo

snmpgo is a golang implementation for sending SNMP messages.

Supported Message Types

  • SNMP V1
    • GetRequest
    • GetNextRequest
  • SNMP V2c, V3
    • GetRequest
    • GetNextRequest
    • GetBulkRequest
    • V2Trap
    • InformRequest

Examples

getv2.go, getv3.go

Example for sending a GetRequest. Explain how to use basic of the API.

package main

import (
    "fmt"

    "github.com/k-sone/snmpgo"
)

func main() {
    snmp, err := snmpgo.NewSNMP(snmpgo.SNMPArguments{
        Version:   snmpgo.V2c,
        Address:   "127.0.0.1:161",
        Retries:   1,
        Community: "public",
    })
    if err != nil {
        // Failed to create snmpgo.SNMP object
        fmt.Println(err)
        return
    }

    oids, err := snmpgo.NewOids([]string{
        "1.3.6.1.2.1.1.1.0",
        "1.3.6.1.2.1.1.2.0",
        "1.3.6.1.2.1.1.3.0",
    })
    if err != nil {
        // Failed to parse Oids
        fmt.Println(err)
        return
    }

    if err = snmp.Open(); err != nil {
        // Failed to open connection
        fmt.Println(err)
        return
    }
    defer snmp.Close()

    pdu, err := snmp.GetRequest(oids)
    if err != nil {
        // Failed to request
        fmt.Println(err)
        return
    }
    if pdu.ErrorStatus() != snmpgo.NoError {
        // Received an error from the agent
        fmt.Println(pdu.ErrorStatus(), pdu.ErrorIndex())
    }

    // get VarBind list
    fmt.Println(pdu.VarBinds())

    // select a VarBind
    fmt.Println(pdu.VarBinds().MatchOid(oids[0]))
}

trapv2.go, trapv3.go

Example for sending a V2Trap. Explain how to build varbinds using API.

multiget.go

Example for sending a GetRequest to multiple agents.

ifstat.go

This command displays the traffic of agent at regular intervals. Explain how to process the obtained information.

snmpgoget.go

snmpget@Net-SNMP like command.

snmpgobulkwalk.go

snmpbulkwalk@Net-SNMP like command.

snmpgotrap.go

snmptrap@Net-SNMP like command.

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	OidSysUpTime          = MustNewOid("1.3.6.1.2.1.1.3.0")
	OidSnmpTrap           = MustNewOid("1.3.6.1.6.3.1.1.4.1.0")
	OidSnmpTrapEnterprise = MustNewOid("1.3.6.1.6.3.1.1.4.3.0")
)
View Source
var UnsupportedOperation error = errors.New("Unsupported operation")

Functions

This section is empty.

Types

type ArgumentError

type ArgumentError struct {
	Value   interface{} // Argument that has a problem
	Message string      // Error message
}

An ArgumentError suggests that the arguments are wrong

func (ArgumentError) Error

func (e ArgumentError) Error() string

type AuthProtocol

type AuthProtocol string
const (
	Md5 AuthProtocol = "MD5"
	Sha AuthProtocol = "SHA"
)

type Counter32

type Counter32 struct {
	Value uint32
}

func NewCounter32

func NewCounter32(i uint32) *Counter32

func (*Counter32) BigInt

func (v *Counter32) BigInt() (*big.Int, error)

func (*Counter32) Marshal

func (v *Counter32) Marshal() ([]byte, error)

func (*Counter32) String

func (v *Counter32) String() string

func (*Counter32) Type

func (v *Counter32) Type() string

func (*Counter32) Unmarshal

func (v *Counter32) Unmarshal(b []byte) (rest []byte, err error)

type Counter64

type Counter64 struct {
	Value uint64
}

func NewCounter64

func NewCounter64(i uint64) *Counter64

func (*Counter64) BigInt

func (v *Counter64) BigInt() (*big.Int, error)

func (*Counter64) Marshal

func (v *Counter64) Marshal() ([]byte, error)

func (*Counter64) String

func (v *Counter64) String() string

func (*Counter64) Type

func (v *Counter64) Type() string

func (*Counter64) Unmarshal

func (v *Counter64) Unmarshal(b []byte) (rest []byte, err error)

type EndOfMibView

type EndOfMibView struct {
	Null
}

func NewEndOfMibView

func NewEndOfMibView() *EndOfMibView

func (*EndOfMibView) Marshal

func (v *EndOfMibView) Marshal() ([]byte, error)

func (*EndOfMibView) Type

func (v *EndOfMibView) Type() string

func (*EndOfMibView) Unmarshal

func (v *EndOfMibView) Unmarshal(b []byte) (rest []byte, err error)

type ErrorStatus

type ErrorStatus int
const (
	NoError ErrorStatus = iota
	TooBig
	NoSuchName
	BadValue
	ReadOnly
	GenError
	NoAccess
	WrongType
	WrongLength
	WrongEncoding
	WrongValue
	NoCreation
	InconsistentValue
	ResourceUnavailable
	CommitFailed
	UndoFailed
	AuthorizationError
	NotWritable
	InconsistentName
)

func (ErrorStatus) String

func (e ErrorStatus) String() string

type Gauge32

type Gauge32 struct {
	Counter32
}

func NewGauge32

func NewGauge32(i uint32) *Gauge32

func (*Gauge32) Marshal

func (v *Gauge32) Marshal() ([]byte, error)

func (*Gauge32) Type

func (v *Gauge32) Type() string

func (*Gauge32) Unmarshal

func (v *Gauge32) Unmarshal(b []byte) (rest []byte, err error)

type Integer

type Integer struct {
	Value int32
}

func NewInteger

func NewInteger(i int32) *Integer

func (*Integer) BigInt

func (v *Integer) BigInt() (*big.Int, error)

func (*Integer) Marshal

func (v *Integer) Marshal() ([]byte, error)

func (*Integer) String

func (v *Integer) String() string

func (*Integer) Type

func (v *Integer) Type() string

func (*Integer) Unmarshal

func (v *Integer) Unmarshal(b []byte) (rest []byte, err error)

type Ipaddress

type Ipaddress struct {
	OctetString
}

func NewIpaddress

func NewIpaddress(a, b, c, d byte) *Ipaddress

func (*Ipaddress) BigInt

func (v *Ipaddress) BigInt() (*big.Int, error)

func (*Ipaddress) Marshal

func (v *Ipaddress) Marshal() ([]byte, error)

func (*Ipaddress) String

func (v *Ipaddress) String() string

func (*Ipaddress) Type

func (v *Ipaddress) Type() string

func (*Ipaddress) Unmarshal

func (v *Ipaddress) Unmarshal(b []byte) (rest []byte, err error)

type NoSucheInstance

type NoSucheInstance struct {
	Null
}

func NewNoSucheInstance

func NewNoSucheInstance() *NoSucheInstance

func (*NoSucheInstance) Marshal

func (v *NoSucheInstance) Marshal() ([]byte, error)

func (*NoSucheInstance) Type

func (v *NoSucheInstance) Type() string

func (*NoSucheInstance) Unmarshal

func (v *NoSucheInstance) Unmarshal(b []byte) (rest []byte, err error)

type NoSucheObject

type NoSucheObject struct {
	Null
}

func NewNoSucheObject

func NewNoSucheObject() *NoSucheObject

func (*NoSucheObject) Marshal

func (v *NoSucheObject) Marshal() ([]byte, error)

func (*NoSucheObject) Type

func (v *NoSucheObject) Type() string

func (*NoSucheObject) Unmarshal

func (v *NoSucheObject) Unmarshal(b []byte) (rest []byte, err error)

type Null

type Null struct{}

func NewNull

func NewNull() *Null

func (*Null) BigInt

func (v *Null) BigInt() (*big.Int, error)

func (*Null) Marshal

func (v *Null) Marshal() ([]byte, error)

func (*Null) String

func (v *Null) String() string

func (*Null) Type

func (v *Null) Type() string

func (*Null) Unmarshal

func (v *Null) Unmarshal(b []byte) (rest []byte, err error)

type OctetString

type OctetString struct {
	Value []byte
}

func NewOctetString

func NewOctetString(b []byte) *OctetString

func (*OctetString) BigInt

func (v *OctetString) BigInt() (*big.Int, error)

func (*OctetString) Marshal

func (v *OctetString) Marshal() ([]byte, error)

func (*OctetString) String

func (v *OctetString) String() string

func (*OctetString) Type

func (v *OctetString) Type() string

func (*OctetString) Unmarshal

func (v *OctetString) Unmarshal(b []byte) (rest []byte, err error)

type Oid

type Oid struct {
	Value asn1.ObjectIdentifier
}

func MustNewOid

func MustNewOid(s string) *Oid

MustNewOid is like NewOid but panics if argument cannot be parsed

func NewOid

func NewOid(s string) (oid *Oid, err error)

func (*Oid) AppendSubIds

func (v *Oid) AppendSubIds(subs []int) (*Oid, error)

Returns Oid with additional sub-ids

func (*Oid) BigInt

func (v *Oid) BigInt() (*big.Int, error)

func (*Oid) Compare

func (v *Oid) Compare(o *Oid) int

Returns 0 this OID is equal to the specified OID, -1 this OID is lexicographically less than the specified OID, 1 this OID is lexicographically greater than the specified OID

func (*Oid) Contains

func (v *Oid) Contains(o *Oid) bool

Returns true if this OID contains the specified OID

func (*Oid) Equal

func (v *Oid) Equal(o *Oid) bool

Returns true if this OID is same the specified OID

func (*Oid) Marshal

func (v *Oid) Marshal() ([]byte, error)

func (*Oid) String

func (v *Oid) String() string

func (*Oid) Type

func (v *Oid) Type() string

func (*Oid) Unmarshal

func (v *Oid) Unmarshal(b []byte) (rest []byte, err error)

type Oids

type Oids []*Oid

func NewOids

func NewOids(s []string) (oids Oids, err error)

func (Oids) Sort

func (o Oids) Sort() Oids

Sort a Oid list

func (Oids) Uniq

func (o Oids) Uniq() Oids

Filter out adjacent OID list

func (Oids) UniqBase

func (o Oids) UniqBase() Oids

Filter out adjacent OID list with the same prefix

type Opaque

type Opaque struct {
	OctetString
}

func NewOpaque

func NewOpaque(b []byte) *Opaque

func (*Opaque) Marshal

func (v *Opaque) Marshal() ([]byte, error)

func (*Opaque) String

func (v *Opaque) String() string

func (*Opaque) Type

func (v *Opaque) Type() string

func (*Opaque) Unmarshal

func (v *Opaque) Unmarshal(b []byte) (rest []byte, err error)

type Pdu

type Pdu interface {
	PduType() PduType
	RequestId() int
	SetRequestId(int)
	ErrorStatus() ErrorStatus
	SetErrorStatus(ErrorStatus)
	ErrorIndex() int
	SetErrorIndex(int)
	SetNonrepeaters(int)
	SetMaxRepetitions(int)
	AppendVarBind(*Oid, Variable)
	VarBinds() VarBinds
	Marshal() ([]byte, error)
	Unmarshal([]byte) (rest []byte, err error)
	String() string
}

func NewPdu

func NewPdu(ver SNMPVersion, t PduType) (pdu Pdu)

func NewPduWithOids

func NewPduWithOids(ver SNMPVersion, t PduType, oids Oids) (pdu Pdu)

func NewPduWithVarBinds

func NewPduWithVarBinds(ver SNMPVersion, t PduType, varBinds VarBinds) (pdu Pdu)

type PduType

type PduType int
const (
	GetRequest PduType = iota
	GetNextRequest
	GetResponse
	SetRequest
	Trap
	GetBulkRequest
	InformRequest
	SNMPTrapV2
	SNMPTrapV1
	Report
)

func (PduType) String

func (t PduType) String() string

type PduV1

type PduV1 struct {
	// contains filtered or unexported fields
}

func (*PduV1) AppendVarBind

func (pdu *PduV1) AppendVarBind(oid *Oid, variable Variable)

func (*PduV1) ErrorIndex

func (pdu *PduV1) ErrorIndex() int

func (*PduV1) ErrorStatus

func (pdu *PduV1) ErrorStatus() ErrorStatus

func (*PduV1) Marshal

func (pdu *PduV1) Marshal() (b []byte, err error)

func (*PduV1) PduType

func (pdu *PduV1) PduType() PduType

func (*PduV1) RequestId

func (pdu *PduV1) RequestId() int

func (*PduV1) SetErrorIndex

func (pdu *PduV1) SetErrorIndex(i int)

func (*PduV1) SetErrorStatus

func (pdu *PduV1) SetErrorStatus(i ErrorStatus)

func (*PduV1) SetMaxRepetitions

func (pdu *PduV1) SetMaxRepetitions(i int)

func (*PduV1) SetNonrepeaters

func (pdu *PduV1) SetNonrepeaters(i int)

func (*PduV1) SetRequestId

func (pdu *PduV1) SetRequestId(i int)

func (*PduV1) String

func (pdu *PduV1) String() string

func (*PduV1) Unmarshal

func (pdu *PduV1) Unmarshal(b []byte) (rest []byte, err error)

func (*PduV1) VarBinds

func (pdu *PduV1) VarBinds() VarBinds

type PrivProtocol

type PrivProtocol string
const (
	Des PrivProtocol = "DES"
	Aes PrivProtocol = "AES"
)

type ResponseError

type ResponseError struct {
	Cause   error  // Cause of the error
	Message string // Error message
	Detail  string // Detail of the error for debugging
}

A ResponseError suggests that the response from the remote agent is wrong or is not obtained

func (ResponseError) Error

func (e ResponseError) Error() string

type SNMP

type SNMP struct {
	// contains filtered or unexported fields
}

SNMP Object provides functions for the SNMP Client

func NewSNMP

func NewSNMP(args SNMPArguments) (*SNMP, error)

Create a SNMP Object

func (*SNMP) Close

func (s *SNMP) Close()

Close a connection

func (*SNMP) GetBulkRequest

func (s *SNMP) GetBulkRequest(oids Oids, nonRepeaters, maxRepetitions int) (result Pdu, err error)

func (*SNMP) GetBulkWalk

func (s *SNMP) GetBulkWalk(oids Oids, nonRepeaters, maxRepetitions int) (result Pdu, err error)

This method inquire about OID subtrees by repeatedly using GetBulkRequest. Returned PDU contains the varbind list of all subtrees. however, if the ErrorStatus of PDU is not the NoError, return only the last query result.

func (*SNMP) GetNextRequest

func (s *SNMP) GetNextRequest(oids Oids) (result Pdu, err error)

func (*SNMP) GetRequest

func (s *SNMP) GetRequest(oids Oids) (result Pdu, err error)

func (*SNMP) InformRequest

func (s *SNMP) InformRequest(varBinds VarBinds) error

func (*SNMP) Open

func (s *SNMP) Open() (err error)

Open a connection

func (*SNMP) String

func (s *SNMP) String() string

func (*SNMP) V1Trap

func (s *SNMP) V1Trap(varPduV1 TrapPduV1) (err error)

func (*SNMP) V2Trap

func (s *SNMP) V2Trap(varBinds VarBinds) error

type SNMPArguments

type SNMPArguments struct {
	Version          SNMPVersion   // SNMP version to use
	Network          string        // See net.Dial parameter (The default is `udp`)
	Address          string        // See net.Dial parameter
	Timeout          time.Duration // Request timeout (The default is 5sec)
	Retries          uint          // Number of retries (The default is `0`)
	MessageMaxSize   int           // Maximum size of an SNMP message (The default is `1400`)
	Community        string        // Community (V1 or V2c specific)
	UserName         string        // Security name (V3 specific)
	SecurityLevel    SecurityLevel // Security level (V3 specific)
	AuthPassword     string        // Authentication protocol pass phrase (V3 specific)
	AuthProtocol     AuthProtocol  // Authentication protocol (V3 specific)
	PrivPassword     string        // Privacy protocol pass phrase (V3 specific)
	PrivProtocol     PrivProtocol  // Privacy protocol (V3 specific)
	SecurityEngineId string        // Security engine ID (V3 specific)
	ContextEngineId  string        // Context engine ID (V3 specific)
	ContextName      string        // Context name (V3 specific)
}

An argument for creating a SNMP Object

func (*SNMPArguments) String

func (a *SNMPArguments) String() string

type SNMPVersion

type SNMPVersion int
const (
	V1  SNMPVersion = 0
	V2c SNMPVersion = 1
	V3  SNMPVersion = 3
)

func (SNMPVersion) String

func (s SNMPVersion) String() string

type ScopedPdu

type ScopedPdu struct {
	ContextEngineId []byte
	ContextName     []byte
	PduV1
}

The ScopedPdu is used by SNMP V3. Includes the PduV1, and contains a SNMP context parameter

func (*ScopedPdu) Marshal

func (pdu *ScopedPdu) Marshal() (b []byte, err error)

func (*ScopedPdu) String

func (pdu *ScopedPdu) String() string

func (*ScopedPdu) Unmarshal

func (pdu *ScopedPdu) Unmarshal(b []byte) (rest []byte, err error)

type SecurityLevel

type SecurityLevel int
const (
	NoAuthNoPriv SecurityLevel = iota
	AuthNoPriv
	AuthPriv
)

func (SecurityLevel) String

func (s SecurityLevel) String() string

type TimeTicks

type TimeTicks struct {
	Counter32
}

func NewTimeTicks

func NewTimeTicks(i uint32) *TimeTicks

func (*TimeTicks) Marshal

func (v *TimeTicks) Marshal() ([]byte, error)

func (*TimeTicks) Type

func (v *TimeTicks) Type() string

func (*TimeTicks) Unmarshal

func (v *TimeTicks) Unmarshal(b []byte) (rest []byte, err error)

type TrapPduV1

type TrapPduV1 struct {
	Enterprise       string
	AgentAddr        string
	GenericTrap      int
	SpecificTrap     int
	TimeStamp        int
	VariableBindings int
}

type VarBind

type VarBind struct {
	Oid      *Oid
	Variable Variable
}

func NewVarBind

func NewVarBind(oid *Oid, val Variable) *VarBind

func (*VarBind) Marshal

func (v *VarBind) Marshal() (b []byte, err error)

func (*VarBind) String

func (v *VarBind) String() string

func (*VarBind) Unmarshal

func (v *VarBind) Unmarshal(b []byte) (rest []byte, err error)

type VarBinds

type VarBinds []*VarBind

func (VarBinds) MatchBaseOids

func (v VarBinds) MatchBaseOids(prefix *Oid) VarBinds

Gets a VarBind list that matches the prefix

func (VarBinds) MatchOid

func (v VarBinds) MatchOid(oid *Oid) *VarBind

Gets a VarBind that matches

func (VarBinds) Sort

func (v VarBinds) Sort() VarBinds

Sort a VarBind list by OID

func (VarBinds) String

func (v VarBinds) String() string

func (VarBinds) Uniq

func (v VarBinds) Uniq() VarBinds

Filter out adjacent VarBind list

type Variable

type Variable interface {
	// Return a BigInt representation of this Variable if such a representation exists
	BigInt() (*big.Int, error)
	// Return a string representation of this Variable
	String() string
	// Return a string of type
	Type() string
	Marshal() ([]byte, error)
	Unmarshal([]byte) (rest []byte, err error)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL