문제

Bootp 서버 역할을하려면 C# .NET 응용 프로그램 중 하나가 필요합니다. 프로토콜은 매우 간단하지만 이진 데이터를 구축/구문 분석하는 쉬운 방법을 모르겠습니다.

모든 아이디어 :alt text
(원천: 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에 대한이 주제 자세한 내용은).
이것이 도움이되기를 바랍니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top