为了账号安全,请及时绑定邮箱和手机立即绑定

递归定义SNMP消息

递归定义SNMP消息

Go
慕田峪4524236 2021-03-30 13:41:47
我在Go中弄乱了SNMP库,并想出了Field根据本文档定义SNMP BER编码字段的类型。每个字段由类型,长度和值组成,其中类型是ASN.1类型,长度是字段值的长度,值可以是另一个字段,字段序列或字节序列。这使我考虑了递归定义SNMP消息的可能性。这是我想出的一些代码,但是我一直试图将其转换为递归结构:package mainimport "fmt"// ASN.1 BER encoded types.type ASN1BER byteconst (    Integer          ASN1BER = 0x02    BitString                = 0x03    OctetString              = 0x04    Null                     = 0x05    ObjectIdentifier         = 0x06    Sequence                 = 0x30    GetRequest               = 0xa0)// SNMP versions.type Version byteconst (    Version1  Version = 0x00    Version2c         = 0x01)// SNMP message field.type Field struct {    Type  ASN1BER    Len   int    Value interface{}}func main() {    // SNMP Message    msg := &Field{Type: Sequence, Len: 44, Value: []*Field{        // SNMP Version        {Type: Integer, Len: 1, Value: Version2c},        // Community String        {Type: OctetString, Len: 7, Value: []byte("private")},        // Get-Request PDU        {Type: GetRequest, Len: 30, Value: []*Field{            // Request ID            {Type: Integer, Len: 1, Value: []byte{0x01}},            // Error Status            {Type: Integer, Len: 1, Value: []byte{0x00}},            // Error Index            {Type: Integer, Len: 1, Value: []byte{0x00}},            // Varbind List            {Type: Sequence, Len: 19, Value: []*Field{                // Varbind                {Type: Sequence, Len: 17, Value: []*Field{                    // OID 1.3.6.1.4.1.2680.1.2.7.3.2.0                    {Type: ObjectIdentifier, Len: 13, Value: []byte{0x2b, 0x06, 0x01, 0x04, 0x01, 0x94, 0x78, 0x01, 0x02, 0x07, 0x03, 0x02, 0x00}},                    // Value                    {Type: Null, Len: 0},                }}},            }},        }},    }    fmt.Println(msg)}是否可以递归表示SNMP消息?如果是这样,那么基本案例和递归案例将是什么?目的是能够递归地打印,编码和解码SNMP消息。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 241 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信