我在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
提交
取消