Estou escrevendo um filtro de rede muito simples e chegando ao ponto em que desejo analisar os cabeçalhos IPv6 para corresponder a coisas como tipos ICMPv6, números de porta TCP / UDP etc.
Então, estou lendo sobre o formato de pacote IPv6 em profundidade, e eu meio que ... bem ... Eu meio que tive que ler várias vezes para ter certeza de que estava realmente lendo direito. Parece-me que você precisa começar com o cabeçalho fixo de 40 bytes e examinar o próximo campo de cabeçalho. Em seguida, você deve olhar para o próximo campo de cabeçalho do próximo cabeçalho e assim por diante, como uma lista vinculada, até chegar ao fim. Se houver carga útil, ela seguirá.
O problema é que não há campo de comprimento no cabeçalho fixo ou nos cabeçalhos de extensão. Você tem que ter uma tabela de tipos de cabeçalho de extensão e seus tamanhos para que você possa perseguir esta lista vinculada até o fim.
Isso me parece um desenho estranho, possivelmente até mesmo desmiolado. E se eu encontrar um tipo de cabeçalho de extensão não reconhecido? O que eu faço? Não sei seu comprimento. Acho que tenho que jogar o pacote fora e bloqueá-lo, já que em um filtro de rede, permitir a passagem do pacote permitiria a um invasor escapar do filtro de rede incluindo um tipo de cabeçalho falso. Mas isso significa que, se o protocolo for estendido, cada pedaço do software de análise de cabeçalho IPv6 já escrito deve ser atualizado simultaneamente se a nova extensão for usada.
Então, como posso analisar os cabeçalhos IPv6 se não sei as extensões que eles estão usando? Como posso pular um cabeçalho para uma extensão desconhecida, já que não sei seu comprimento?