C#计算TCP IP校验和的简单示例代码(从别处抄的)
从Stackoverflow上找的一个国外的博客
https://cyb3rspy.wordpress.com/2008/03/27/ip-header-checksum-function-in-c/
我自己瞎扯两句,可能有错误
1.字节数要偶数个,校验和的基础是16个比特位一组
2.字节数组太长了可能会计算出错,因为求完和才会将大于16位的高位加到低位
3.求出的结果的字节序跟本机有关,写入根据使用可能要调整为网络字节序
算法大体上是,将字节数组按16比特位一组,以网络字节序看待成整数求和,然后把高于16位的位加到低位(原来的高位抹去),直至高于16位的位都是0,然后比特位取反
public static ushort ComputeHeaderIpChecksum(byte[] header, int start, int length) { ushort word16; long sum = 0; for (int i = start; i < (length + start); i+=2) { word16 = (ushort)(((header[i] << 8 ) & 0xFF00) + (header[i + 1] & 0xFF)); sum += (long)word16; } while ((sum >> 16) != 0) { sum = (sum & 0xFFFF) + (sum >> 16); } sum = ~sum; return (ushort)sum; }
浙公网安备 33010602011771号