0
我在x64机器上。这里是我是如何计算校验和ICMP:ICMP校验和不正确
unsigned short in_checksum(unsigned short *ptr, int n_bytes)
{
register long sum;
u_short odd_byte;
register u_short ret_checksum;
while (n_bytes > 1)
{
sum += *ptr++;
n_bytes -= 2;
}
if (n_bytes == 1)
{
odd_byte = 0;
*((u_char *) & odd_byte) = * (u_char *) ptr;
sum += odd_byte;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
ret_checksum = ~sum;
return ret_checksum;
}
当我嗅探Wireshark的发包,我总是说的校验和不正确每个icmp包。这是怎么回事?
我的ping检查实现 - 不确定是否可以帮助你https://github.com/petrbel/pvu2/blob/master/ping/ping.c#L50 – petrbel