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