Analisar dados binários para o servidor c # bootp?
-
19-09-2019 - |
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:
(fonte: tcpipguide.com )
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:)