c# bootp 서버의 바이너리 데이터를 구문 분석 하시겠습니까?
-
19-09-2019 - |
문제
Bootp 서버 역할을하려면 C# .NET 응용 프로그램 중 하나가 필요합니다. 프로토콜은 매우 간단하지만 이진 데이터를 구축/구문 분석하는 쉬운 방법을 모르겠습니다.
모든 아이디어 :
(원천: tcpipguide.com)
해결책
이 작업을 수행하는 몇 가지 방법이 있습니다. 당신은 함께 놀 수 있습니다 마샬링 속성 구조물을 바이트 어레이에 포장하려는 Structlayout과 같이 이것은 아마도 까다 롭고 노력할 가치가 없을 것입니다.
다음과 같은 특수 프레임 워크를 사용할 수 있습니다 protobuf 필요한 구조와 일치하도록 직렬화되는 방식으로 클래스를 기인합니다.
그러나 내 경험에 따르면, 이와 같은 이진 구조를 만드는 가장 쉽고 빠르며 가장 유연한 방법은 MemoryStream 클래스를 사용하여 BYES의 버퍼를 고정 한 다음 A를 사용하는 것입니다. 바이린 라이터 이진 데이터를 실제로 스트림에 쓰기 위해 주변에 있습니다.
어쨌든 참조 할 작업 서버가 있어야합니다. 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
}
그리고 코드를 사용하십시오 이 블로그 포스트 패킷을 직렬화/디스 실리화하기 위해. 그러나 인코딩의 차이로 인해 ServerName 및 BootFilename에 문제가있을 수 있으며 각 필드에 대한 정확한 필드 오프셋을 지정해야 할 수도 있습니다 (참조. MSDN에 대한이 주제 자세한 내용은).
이것이 도움이되기를 바랍니다 :)