我正在编写一个非常简单的净过滤器,然后到我想要解析 IPv6报头以匹配诸如 ICMPv6类型、 TCP/UDP 端口号等内容的地方。
所以我深入地阅读了 IPv6数据包格式,我有点像... 嗯... 我不得不一遍又一遍地阅读它,以确保我实际上是正确的阅读它。 在我看来,您必须从40字节的固定头部开始,然后查看它的下一个头部字段。然后,您必须查看下一个标题的下一个标题字段,以此类推,就像链表一样,直到到达结尾。如果有有效载荷,它就会跟着来。
问题是在固定标头或扩展标头中都没有长度字段。您必须有一个扩展头类型及其大小的表,以便您可以追踪这个链接列表到结尾。
我觉得这是一个奇怪的,甚至可能是轻率的设计。如果我遇到一个无法识别的扩展头类型怎么办?我该怎么办?我不知道它的长度。我想我必须扔掉数据包并阻止它,因为在允许数据包通过的网络过滤器中,将允许攻击者通过包含伪造的头类型来逃避网络过滤器。但是这意味着如果协议被扩展,那么如果要使用新的扩展,那么 IPv6头解析软件的每一部分都必须同时更新。
因此,如果我不知道他们使用的扩展,我如何解析 IPv6头文件?既然我不知道一个未知扩展的标题的长度,那么我怎样才能跳过它呢?