в заголовке ICMP они заполняют контрольную сумму следующим утверждением
я нашел значение ICMP_ECHO как 8
icmp->checksum = htons(~(ICMP_ECHO << 8));
может ли кто-нибудь сказать мне, что именно он будет делать, и как он заполнит детали контрольной суммы
Контрольная сумма ICMP является контрольной суммой RFC 1071:
(1) Смежные октеты, подлежащие контрольной сумме, спариваются для формирования 16-разрядных целых чисел, и формируется 1 дополнительная сумма этих 16-битных целых чисел.
(2) Чтобы сгенерировать контрольную сумму, само поле контрольной суммы очищается, 16-разрядная сумма дополнений вычисляется по соответствующим октетам, а 1 дополнение этой суммы помещается в поле контрольной суммы.
Поле типа и кода должно быть 0x08 0x00
для сообщения ICMP_ECHO (тип 8, код 0), и если это все данные, которые содержит сообщение, это также сумма из 16-битных целых чисел, которые должны формировать контрольную сумму.