Как найти полезную нагрузку в необработанном пакете IPv6?

Как найти полезную нагрузку верхнего уровня в необработанном пакете IPv6 на C с учетом дополнительных заголовков расширения?

Используя Linux libc, я socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)в котором принятый пакет ICMP иногда переносит пакет IPv6 (что является нормальным, например, для пакетов "превышено время"). Чтение входящего пакета сrecvfrom(), Я получаю буфер, содержащий самый внешний пакет ICMP. Затем я перехожу к полезной нагрузке ICMP, которая сама по себе является пакетом IPv6. Теперь, как перейти к его полезной нагрузке?

Переход на 40 байтов (длина фиксированного заголовка IPv6) не является необходимым, потому что может следовать любое количество заголовков расширения. Заголовки расширения различаются по длине, и некоторые из них имеют фиксированную длину, некоторые из них указывают собственную длину. Существует ли общий алгоритм определения следующего заголовка в буфере пакетов? не зная каждый существующий и будущий тип EH.

0 ответов

Другие вопросы по тегам