Note that there are some explanatory texts on larger screens.

plurals
  1. POICMP Checksum error
    primarykey
    data
    text
    <p>I am trying to checksum icmp packet using the same technique for tcp and udp but it get wrong checksum, can you tell me where is my problem ?</p> <pre><code> ICMP_HEADER *icmpheader = new ICMP_HEADER; memcpy(icmpheader,ICMPHeader,sizeof(ICMP_HEADER)); icmpheader-&gt;Checksum = 0; PSEUDO_HEADER *psheader = new PSEUDO_HEADER; memcpy(&amp;psheader-&gt;daddr, &amp;IPHeader-&gt;DestinationAddress, sizeof(UINT)); memcpy(&amp;psheader-&gt;saddr, &amp;IPHeader-&gt;SourceAddress, sizeof(UINT)); psheader-&gt;protocol = IPHeader-&gt;Protocol; psheader-&gt;length = htons((USHORT)(sizeof(ICMP_HEADER) + ICMPDataSize)); psheader-&gt;zero = 0x0000; UINT packet_size = sizeof(ICMP_HEADER) + ICMPDataSize + sizeof(PSEUDO_HEADER); packet_size = packet_size + ((packet_size%2)*2); UCHAR *icmppacket = (UCHAR*)malloc(packet_size); memset(icmppacket,0, packet_size); memcpy(icmppacket, psheader, sizeof(PSEUDO_HEADER)); memcpy(&amp;icmppacket[sizeof(PSEUDO_HEADER)], icmpheader,sizeof(ICMP_HEADER)); memcpy(&amp;icmppacket[sizeof(PSEUDO_HEADER) + sizeof(ICMP_HEADER)],ICMPData,ICMPDataSize); if (GlobalChecksum((USHORT*)icmppacket,packet_size) != ICMPHeader-&gt;Checksum) { isMalformed = true; PacketError = PACKET_ICMP_CHECKSUM; } USHORT cPacket::GlobalChecksum(USHORT *buffer, UINT length) { register int sum = 0; USHORT answer = 0; register USHORT *w = buffer; register int nleft = length; while(nleft &gt; 1){ sum += *w++; nleft -= 2; } sum = (sum &gt;&gt; 16) + (sum &amp; 0xFFFF); sum += (sum &gt;&gt; 16); answer = ~sum; return(answer); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload