// // 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));
로 했습니다.
mip_hdr.Checksum := htons(snoopIPChecksum(mip_hdr));
2바이트, 4바이트, 8바이트 필드에 대해서는 host byte order 및 network byte order를 주의해 주시기 바랍니다.