Maison >développement back-end >Golang >Échec du démarshalage de l'ASN

Échec du démarshalage de l'ASN

WBOY
WBOYavant
2024-02-14 16:27:081223parcourir

解组 asn 失败

l'éditeur php Xigua est là pour partager avec vous une question sur "l'échec de la démarshallisation". Dans les communications réseau, l'ASN (Autonomous System Number) est un numéro utilisé pour identifier les systèmes autonomes. Cependant, le dégroupage échoue parfois lors du dissociation de l'ASN. Cela peut être dû à un format de codage ASN incorrect, à des paquets ASN endommagés ou à des analyseurs incompatibles. Dans cet article, nous aborderons les raisons et les solutions à l’échec du démobilisation de l’ASN pour aider chacun à mieux comprendre et résoudre ce problème.

Contenu des questions

package main

import (
    "encoding/asn1"
    "fmt"
)

type SimpleStruct struct {
    Value int
}

func main() {
    berBytes := []byte{0x02, 0x01, 0x05}

    var simpleStruct SimpleStruct
    _, err := asn1.Unmarshal(berBytes, &simpleStruct)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Decoded value: %d\n", simpleStruct.Value)
}

J'ai essayé de désorganiser mais j'ai obtenu l'erreur suivante :

<code>
Error: asn1: structure error: tags don't match (16 vs {class:0 tag:2 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} SimpleStruct @2
</code>

Quelqu'un peut-il m'aider ? Merci

La solution de contournement

0x020105 encode l'entier 5 (voir https://www.php.cn/link/8ae7733f9bc11275e8d0a0fdabe5be0a), il doit donc être non marshalé en un entier, pas une structure avec un champ entier :

package main

import (
    "encoding/asn1"
    "fmt"
)

func main() {
    berBytes := []byte{0x02, 0x01, 0x05}

    var v int
    _, err := asn1.Unmarshal(berBytes, &v)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Decoded value: %d\n", v)
    // Output:
    //   Decoded value: 5
}

et SimpleStruct{Value: 5} 被编组为 0x3003020105 :

package main

import (
    "encoding/asn1"
    "fmt"
)

type SimpleStruct struct {
    Value int
}

func main() {
    simpleStruct := SimpleStruct{Value: 5}
    buf, err := asn1.Marshal(simpleStruct)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Encoded value: 0x%x\n", buf)
    // Output:
    //   Encoded value: 0x3003020105
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer