0
Совершенно верно. Wireshark под виндой ругается на некорректную контрольную сумму ICMP ответа, поэтому утилита ping говорит о недоступном узле. Единственное- перед вычислением контрольной суммы её нужно обнулить. Магия в том, что мы вычисляем контрольную сумму пакета, содержащего эту же контрольную сумму внутри себя. В итоге за место строки icmp->cksum += 8 нужно вставить следующую конструкцию:
icmp->cksum = 0x0000;
icmp->cksum = ip_cksum(0, (uint8_t *)icmp, len);
После этого ping начинает стабильно работать
  • avatar
  • agele
  • 22 апреля 2019, 15:01