【发布时间】:2013-07-05 07:57:38
【问题描述】:
我正在编写一个非常简单的网络过滤器,并到达我想要解析 IPv6 标头以匹配 ICMPv6 类型、TCP/UDP 端口号等内容的位置。
所以我正在深入阅读IPv6 packet format,我有点像......嗯......我不得不一遍又一遍地阅读它以确保我实际上阅读它是正确的. 在我看来,您必须从 40 字节的固定标头开始,然后查看它的下一个标头字段。然后你必须查看下一个标题的下一个标题字段,以此类推,就像一个链表,直到你到达末尾。如果有有效载荷,它就会跟随。
问题在于固定标头或扩展标头中都没有长度字段。您必须有一个扩展标头类型及其大小的表,以便您可以将这个链表追踪到最后。
这让我觉得这是一个奇怪的,甚至可能是愚蠢的设计。如果我遇到无法识别的扩展标头类型怎么办?我该怎么办?我不知道它的长度。我想我必须将数据包丢弃并阻止它,因为在允许数据包通过的网络过滤器中,攻击者可以通过包含虚假的标头类型来逃避网络过滤器。 但这意味着如果协议被扩展,如果要使用新的扩展,那么曾经编写的每一个 IPv6 报头解析软件都必须同时更新。
那么,如果我不知道 IPv6 标头使用的扩展名,我该如何解析它们呢?由于我不知道它的长度,如何跳过未知扩展的标头?
【问题讨论】:
-
基于这个问题,我看起来并不愚蠢,是的,我没看错:(在现实世界中)不可能向 IPv6 添加新的扩展标头。 stackoverflow.com/questions/9847923/…
-
是的,计算标头长度似乎也需要链表遍历:stackoverflow.com/questions/14762193/… 不要误会我的意思。 IPv6 很棒而且非常需要。但这似乎仍然是愚蠢的。
-
规范(链接在顶部评论中)说路由器不应该查看标头,因此不应该关心您添加的标头。只有目标节点应该查看标头。
-
请注意:“hair-brained”是一个相当混乱的拼写,应该首选“hare-brained”(来源:tfd)
-
只要有一个正确的拼写,那就是'hare-brained'。
标签: networking ip ipv6