Я пытаюсь программно отправить эхо-запросы ICMPv6 (ping6
) с помощью WinSock2.Контрольная сумма ICMPv6 равна , рассчитана на основе всего пакета IPv6, который будет отправлен.По этой причине, насколько я понимаю, операционная система (ядро?) Должна рассчитать его и записать в заголовок ICMPv6 при отправке пакета.
Это очень хорошо работает на SUSE Linux Enterprise Server 11,однако Windows XP, похоже, не делает этого.Он оставляет контрольную сумму на том, что я установил по умолчанию (ноль, я проанализировал это с помощью Wireshark), поэтому принимающая сторона отбросит его и не ответит.
IPv6 правильно настроен на этом компьютере WinXP.С помощью Wireshark я даже обнаружил, что он корректно реагирует на эхо-запросы ICMPv6 с сервера SUSE Linux, отправленные с использованием того же кода.Поэтому не может быть, чтобы Windows XP не поддерживала ICMPv6.Однако мне интересно, поддерживает ли WinSock2 под Windows XP.
WinSock2 API предоставляет протокол IPPROTO_ICMPV6
, для которого я создаю свой необработанный сокет.Есть ли какая-то особая опция сокета, которую мне нужно установить для автоматического вычисления контрольной суммы ICMPv6, или есть какие-то другие хитрости?