//  // Set IP Hdr
  mip_hdr.VerLen        := $45;
  mip_hdr.Service       := $00;
  mip_hdr.Len           := htons(48);
  mip_hdr.Ident         := htons(51416 + 1);
  mip_hdr.FlagOff       := 0;
  mip_hdr.TimeLive      := 128;
  mip_hdr.Protocol      := PROTO_UDP;
  mip_hdr.Source        := htonl($C0A80003);
  mip_hdr.Destination   := htonl($C0A8007D);

  mudp_hdr.Source       :=  htons(12216);
  mudp_hdr.Destination  :=  htons(9910);
  mudp_hdr.Len          :=  htons(28);

 

일때 mip_hdr.Checksum      := snoopIPChecksum(mip_hdr); 를 하게되면 정상적인 수 (61458) 이 나옵니다.

그런데 패킷상에서 보면 이게 12 F0 으로 넣어져 있습니다.(실제 날아가는 패킷을 캡쳐하면)

 

원래는  F012 (61458) 로 날아가야되는데 말이죠.. 왜 F0 12 에서 12 F0으로 패킷에 저장될까요?

 

패킷위치정의는

  meth_hdr := @packet[0];
  mip_hdr  := PIP_HDR(UINT32(meth_hdr) + sizeof(ETH_HDR));
  mudp_hdr := PUDP_HDR(UINT32(mip_hdr) + sizeof(IP_HDR));
  mudp_data:= pChar(UINT32(mudp_hdr) + sizeof(UDP_HDR));

로 했습니다.