В настоящее время мы исследуем странное поведение различных устройств: если мы отправляем «пустые» пакеты ICMP (то есть ICMP-SEQ и ICMP-ID равны 0x0000, а полезная нагрузка ICMP отсутствует), например, используя
nping --icmp --icmp-seq=0 --icmp-id=0 8.8.8.8
тогда разные системы отвечают по-разному:
Я почти уверен, что видел 0xFFFF из 8.8.8.8, но в настоящее время не могу воспроизвести это.
Итак, мои вопросы:
Примечание. Этот пакет ICMP действителен в соответствии с RFC 792.
PS: Я надеюсь, что serverfault - правильный форум. Если нет, то заранее прошу прощения;)
Покопавшись с tcpdump
, nping
и nmap
Примерно за три часа мне удалось определить следующее: Windows правильно вычисляет контрольную сумму, и в основном никто этого не делает. Когда у вас есть пакет, состоящий только из 0, вы должны получить контрольную сумму 0xffff (источник), но каждая машина linux / BSD, которую я проверял, вернула контрольную сумму 0x0000. Я думаю, это просто связано с ошибкой в том, как вычисляется контрольная сумма на многих серверах.