Pergunta

Eu preciso uma das minhas C # .NET aplicações para atuar como um servidor bootp. O protocolo é muito simples, mas eu não sei uma maneira fácil de build / analisar os dados binários.

Todas as ideias: text alt
(fonte: tcpipguide.com )

Foi útil?

Solução

Há algumas maneiras de fazer isso. Você pode ser capaz de brincar com a empacotamento atributos , como StructLayout para embalar uma estrutura em uma matriz de bytes, mas esta é provavelmente complicado e não vale o esforço.

Você pode usar uma estrutura especializada, como Protobuf atribuir uma classe em de tal forma que ele vai ser serializado para coincidir com a estrutura que você precisa.

Mas na minha experiência, o mais fácil, mais rápido e mais método flexível de criar uma estrutura binária como este é usar uma classe MemoryStream para manter um buffer de despedidas, então use uma BinaryWriter em torno dele para realmente escrever os dados binários na corrente.

Em qualquer caso, ele ajuda a ter um servidor trabalhando para referência. Use uma ferramenta como o Wireshark ou Microsoft Network Monitor para capturar o tráfego de fio para que você possa comparar o seu formato de fio para um exemplo que é conhecido por trabalho.

Outras dicas

Você pode criar uma estrutura simples como:

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

e usar o código de este blogpost para serializar / desserializar pacotes. Mas pode haver um problema com ServerName e BootFilename por causa das diferenças na codificação e, provavelmente, você precisa especificar FieldOffset exata para cada um dos campos (veja este tópico no MSDN para detalhes).
Esperamos que isto ajude:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top