解析 C# bootp 服务器的二进制数据?
-
19-09-2019 - |
题
我需要我的 C# .NET 应用程序之一充当 bootp 服务器。该协议非常简单,但我不知道构建/解析二进制数据的简单方法。
有任何想法吗:
(来源: tcpipguide.com)
解决方案
有几种方法可以做到这一点。你也许可以玩一下 编组属性 例如 StructLayout 将结构打包到字节数组中,但这可能很棘手并且不值得付出努力。
您可以使用专门的框架,例如 原始缓冲区 以这样的方式属性一个类,它将被序列化以匹配您需要的结构。
但根据我的经验,创建这样的二进制结构的最简单、最快、最灵活的方法是使用 MemoryStream 类来保存字节缓冲区,然后使用 二进制写入器 围绕它实际将二进制数据写入流中。
无论如何,有一个可用的服务器可供参考是有帮助的。使用 Wireshark 或 Microsoft Network Monitor 等工具来捕获有线流量,以便您可以将您的有线格式与已知有效的示例进行比较。
其他提示
可以创建一个简单的结构,如:
[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
}
和使用来自本博文一>序列化/反序列化数据包。但也有可能是因为在编码的差异与服务器名和BootFilename问题,可能需要指定确切FieldOffset每个字段(见的 MSDN上了解详情这个话题)。结果 希望这将帮助:)
不隶属于 StackOverflow