【发布时间】:2016-03-19 19:13:17
【问题描述】:
icmp header checksum和ip header checksum计算方法一样吗?我的意思是,它们可能很相似。但我找到了this ip 标头校验和的代码。我也可以将此代码用于 icmp 标头校验和吗?任何其他帮助都会很棒。
unsigned short cksum(struct ip *ip, int len){
long sum = 0; /* assume 32 bit long, 16 bit short */
while(len > 1){
sum += *((unsigned short*) ip)++;
if(sum & 0x80000000) /* if high order bit set, fold */
sum = (sum & 0xFFFF) + (sum >> 16);
len -= 2;
}
if(len) /* take care of left over byte */
sum += (unsigned short) *(unsigned char *)ip;
while(sum>>16)
sum = (sum & 0xFFFF) + (sum >> 16);
return ~sum;
}
【问题讨论】:
-
您应该检查 RFC 792 中的 ICMP "Header Checksum - 标头中所有 16 位字的反码和的 16 位反码。为了计算校验和,校验和字段应该为零。将来可能会替换此校验和。" RFC 1071 和 1141 详细说明了如何进行 IP 校验和。
-
@Ron so,你说他们(header checksum和ip header checksum计算方法)不一样?
标签: c sockets networking icmp