我正在编写一个非常简单的网络过滤器,并到达要解析IPv6标头以匹配ICMPv6类型,TCP / UDP端口号等内容的位置。
因此,我正在深入阅读IPv6数据包格式,有点像……好吧……我不得不一遍又一遍地阅读它,以确保我实际上读得对。在我看来,您必须从40字节的固定标头开始,然后查看其下一个标头字段。然后,您必须查看下一个标头的下一个标头字段,依此类推,就像链接列表一样,直到到达末尾。如果有有效载荷,它将跟随。
问题在于,固定标头或扩展标头中都没有长度字段。您必须具有扩展头类型及其大小的表格,以便可以将此链接列表追到最后。
这让我印象深刻,这是一个奇怪的甚至可能是无脑的设计。如果遇到无法识别的扩展头类型,该怎么办?我该怎么办?我不知道它的长度。我想我必须将数据包扔出去并阻止它,因为在允许该数据包通过的网络过滤器中,攻击者可以通过包含虚假报头类型来逃避网络过滤器。但这意味着,如果对协议进行扩展,则要使用新扩展名,必须同时更新曾经编写的每个IPv6标头解析软件。
那么,如果我不知道IPv6标头正在使用的扩展名,该如何解析?由于不知道扩展名的长度,如何跳过它的标题?