Piszę bardzo prosty filtr sieciowy i docieram do miejsca, w którym chcę przeanalizować nagłówki IPv6, aby dopasować takie rzeczy, jak typy ICMPv6, numery portów TCP / UDP itp.
Więc czytam dogłębnie o formacie pakietów IPv6 i jestem tak jakby… cóż… Musiałem czytać go w kółko, aby upewnić się, że właściwie czytam. Wydaje mi się, że musisz zacząć od 40-bajtowego stałego nagłówka i spojrzeć na jego następne pole nagłówka. Następnie musisz spojrzeć na następne pole nagłówka następnego nagłówka i tak dalej, jak połączona lista, aż dojdziesz do końca. Jeśli jest ładunek, to nastąpi.
Problem polega na tym, że nie ma pola długości ani w stałym nagłówku, ani w nagłówkach rozszerzeń. Musisz mieć tabelę typów nagłówków rozszerzeń i ich rozmiarów, abyś mógł ścigać tę połączoną listę do końca.
Wydaje mi się, że to dziwny, być może wręcz zającowy projekt. Co się stanie, jeśli napotkam nierozpoznany typ nagłówka rozszerzenia? Co ja robię? Nie znam jego długości. Myślę, że muszę wyrzucić pakiet i zablokować go, ponieważ w filtrze sieciowym przepuszczenie pakietu pozwoliłoby atakującemu na ominięcie filtru sieciowego poprzez włączenie fałszywego typu nagłówka. Ale to oznacza, że jeśli protokół zostanie kiedykolwiek rozszerzony, każdy pojedynczy fragment oprogramowania analizującego nagłówek IPv6, jaki kiedykolwiek został napisany, musi być jednocześnie aktualizowany, jeśli ma być używane nowe rozszerzenie.
Jak więc mogę przeanalizować nagłówki IPv6, jeśli nie znam rozszerzeń, których używają? Jak mogę pominąć nagłówek nieznanego rozszerzenia, skoro nie znam jego długości?