Frage

Ich brauche eine meiner C # .NET-Anwendungen als BOOTP-Server zu agieren. Das Protokoll ist ziemlich einfach, aber ich nicht eine einfache Möglichkeit, build / analysieren, um die binären Daten zu kennen.

Alle Ideen: alt text
(Quelle: tcpipguide.com )

War es hilfreich?

Lösung

Es gibt ein paar Möglichkeiten, dies zu tun. Sie könnten in der Lage sein, das Serialisieren Attribute wie StructLayout eine Struktur in einen Byte-Array zu packen, aber das ist wahrscheinlich heikel und nicht die Mühe wert.

Sie könnten einen spezialisierten Framework verwenden wie Protobuf eine Klasse Attribut in eine solche Art und Weise, dass sie die Struktur, die Sie benötigen.

übereinstimmen serialisiert werden

Aber in meiner Erfahrung ist die einfachste, schnellste und flexibelste Verfahren zur Herstellung eine binäre Struktur wie folgt zu schaffen ist eine Memory Klasse zu verwenden, um einen Puffer von byes zu halten, dann verwenden Sie ein Binary um sie tatsächlich die binären Daten in den Stream zu schreiben.

In jedem Fall hilft es, einen funktionierenden Server Referenz zu haben. Verwenden Sie ein Tool wie Wireshark oder Microsoft Network Monitor den Draht Verkehr zu erfassen, so dass Sie Ihr Draht-Format auf ein Beispiel vergleichen können, der Arbeit bekannt ist.

Andere Tipps

Sie können eine einfache Struktur erstellen wie:

[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  
}  

und verwenden Sie den Code von dieser Blogpost serialisieren / deserialisieren Pakete. Aber es kann ein Problem mit Server und BootFilenamen sein aufgrund von Unterschieden bei der Codierung und wahrscheinlich müssen Sie genau FieldOffset für jedes der Felder angeben (siehe dieses Thema auf Msdn für Details).
Hoffe, dass dies dazu beitragen wird:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top