Je suis en train d'écrire un très simple filet de filtre, et arriver là où je veux analyser les en-têtes IPv6 pour correspondre à des choses comme ICMPv6 types, TCP/UDP numéros de port, etc.
Donc, je suis en train de lire à propos de l' IPv6 format des paquets en profondeur, et je suis un peu comme... eh bien... j'ai eu à le lire, encore et encore pour s'assurer que j'étais en train de lire ce droit. Il me semble que vous devez commencer avec les 40 octets en-tête fixe et de regarder son champ en-tête suivant. Ensuite, vous avez à regarder du côté de l'en-tête du champ en-tête suivant, et ainsi de suite, comme une liste liée, jusqu'à ce que vous atteignez la fin. Si il y a de la charge utile, il va suivre.
Le problème est qu'il n'y a pas de champ de longueur, soit dans l'en-tête fixe ou les en-têtes d'extension. Vous devez avoir un tableau d'en-tête d'extension types et tailles de sorte que vous pouvez chasser cette liste liée à la fin.
Ce qui me frappe comme une étrange et peut-être même écervelé de conception. Que faire si je rencontre une inconnue en-tête d'extension type? Que dois-je faire? Je ne sais pas sa longueur. Je suppose que je dois jeter le paquet et de le bloquer, car dans un filet de filtre permettant le paquet à travers permettrait à un attaquant d'échapper au filet de filtre en y incluant un faux type d'en-tête. Mais cela signifie que si le protocole est jamais étendu, chaque élément de l'en-tête IPv6 d'analyse des logiciels jamais écrites doivent être simultanément mis à jour si la nouvelle extension doit être utilisée.
Alors, comment puis-je analyser les en-têtes IPv6 si je ne connais pas les extensions qu'ils utilisent? Comment puis-je me passer d'un en-tête pour un inconnu extension, puisque je ne connais pas sa longueur?