Estoy escribiendo un filtro de red muy simple y llego a donde quiero analizar los encabezados IPv6 para que coincidan con cosas como tipos ICMPv6, números de puerto TCP / UDP, etc.
Así que estoy leyendo sobre el formato de paquete IPv6 en profundidad, y creo que ... bueno ... tuve que leerlo una y otra vez para asegurarme de que lo estaba leyendo correctamente. Me parece que debe comenzar con el encabezado fijo de 40 bytes y mirar su siguiente campo de encabezado. Luego, debe mirar el siguiente campo de encabezado del siguiente encabezado, y así sucesivamente, como una lista vinculada, hasta llegar al final. Si hay carga útil, seguirá.
El problema es que no hay ningún campo de longitud ni en el encabezado fijo ni en los encabezados de extensión. Debe tener una tabla de tipos de encabezados de extensión y sus tamaños para que pueda perseguir esta lista vinculada hasta el final.
Esto me parece un diseño extraño, posiblemente incluso descabellado. ¿Qué sucede si encuentro un tipo de encabezado de extensión no reconocido? ¿Qué debo hacer? No sé su longitud. Supongo que tengo que tirar el paquete y bloquearlo, ya que en un filtro de red permitir el paso del paquete permitiría a un atacante evadir el filtro de red al incluir un tipo de encabezado falso. Pero eso significa que si el protocolo se extiende alguna vez, cada pieza del software de análisis de encabezados IPv6 que se haya escrito debe actualizarse simultáneamente si se va a utilizar la nueva extensión.
Entonces, ¿cómo puedo analizar los encabezados IPv6 si no conozco las extensiones que están usando? ¿Cómo puedo omitir un encabezado para una extensión desconocida si no conozco su longitud?