Question

J'ai besoin l'un de mes applications C # .NET pour agir en tant que serveur bootp. Le protocole est assez simple, mais je ne sais pas un moyen facile de construire / analyser les données binaires.

Toutes les idées: text alt
(source: tcpipguide.com )

Était-ce utile?

La solution

Il y a deux manières de le faire. Vous pourriez être en mesure de jouer avec le attributs marshaling tels que StructLayout pour emballer une structure dans un tableau d'octets, mais cela est sans doute difficile et ne vaut pas l'effort.

Vous pouvez utiliser un cadre spécialisé tel que Protobuf pour attribuer une classe de telle sorte qu'il sera publié en feuilleton pour correspondre à la structure dont vous avez besoin.

Mais dans mon expérience, le plus facile, la méthode la plus rapide et la plus souple de créer une structure binaire comme celui-ci est d'utiliser une classe MemoryStream pour contenir un tampon de byes, puis utilisez un BinaryWriter autour d'elle pour écrire réellement les données binaires dans le flux.

Dans tous les cas, il est utile d'avoir un serveur de travail de référence. Utilisez un outil comme Wireshark ou Microsoft Network Monitor pour capturer le trafic fil de sorte que vous pouvez comparer votre format de fil à un exemple qui est connu pour travailler.

Autres conseils

Vous pouvez créer une structure simple comme:

[Serializable]
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct MyData {
    public byte OpCode;
    public byte HardwareType;
    public byte HardwareAddressType;
    public byte Hops;

    public int TransactionId;

    public short Seconds;
    public short Flags;

    public int ClientIPAddress;

    public int CurrentIP;

    // all other fields in the required sequence  
}  

et utilisez le code de ce blogpost sérialiser / paquets délinéariser. Mais il peut y avoir un problème avec ServerName et BootFilename en raison des différences dans le codage et vous avez probablement besoin de spécifier FieldOffset exacte pour chacun des champs (voir sur ce sujet msdn pour plus de détails).
Espérons que cela aidera à:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top