【问题标题】:ICMP checksum being incorrectICMP 校验和不正确
【发布时间】:2014-04-25 01:33:15
【问题描述】:

我在 x64 机器上。以下是我计算 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数据包的校验和都不正确。这是怎么回事?

【问题讨论】:

标签: c linux networking 64-bit raw-sockets


【解决方案1】:

你忘了初始化

  register long sum;

到 0。将选项 -W 传递给 gcc 会告诉你。

...:在函数“in_checksum”中: ...:警告:“sum”可能在此函数中未初始化使用

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2013-12-13
    • 2023-03-14
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多