首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析包含未知扩展的IPv6扩展标头

解析包含未知扩展的IPv6扩展标头
EN

Stack Overflow用户
提问于 2013-07-08 11:53:19
回答 2查看 38.2K关注 0票数 113

我正在编写一个非常简单的网络过滤器,并且要解析IPv6报头以匹配ICMPv6类型、TCP/UDP端口号等内容。

所以我在深入阅读关于IPv6 packet format的文章,我有点想...好吧..。我不得不一遍又一遍地读它,以确保我真的读对了。在我看来,您必须从40字节的固定标头开始,然后查看它的下一个标头字段。然后,您必须查看下一个标头的下一个标头字段,依此类推,就像一个链表一样,直到到达末尾。如果有有效载荷,它会随之而来。

问题是在固定报头或扩展报头中都没有长度字段。你必须有一个扩展头类型和它们的大小的表,这样你才能跟踪这个链表到最后。

这让我觉得这是一个奇怪的,甚至可能是愚蠢的设计。如果我遇到无法识别的扩展标头类型怎么办?我做什么好?我不知道它的长度。我想我必须丢弃数据包并阻止它,因为在网络过滤器中,允许数据包通过将允许攻击者通过包含伪造报头类型来规避网络过滤器。但这意味着,如果要扩展该协议,则如果要使用新的扩展,则必须同时更新所编写的每一个IPv6报头解析软件。

那么,如果我不知道IPv6标头正在使用的扩展,我如何解析它们呢?既然我不知道一个未知扩展名的长度,我怎么跳过它的头呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-08 22:16:27

如果你遇到一些你不能解析的东西,你必须根据你已经解析的内容做出决定或者执行你的操作。

之所以这样设计,是因为在IPv6中,每个扩展报头都“包装”了数据包的其余部分。如果您看到路由头,然后是您从未听说过的头,然后是有效负载,那么您将无法解析有效负载。有效负载的含义原则上取决于您不知道如何解释的报头。

路由器可以路由这样的数据包,因为它们只需要路由报头。深度包检测小工具和诸如此类的东西需要知道很多,但那是他们的命运。

编辑后添加:这种设计意味着中间盒只能改变他们知道的东西。如果中间盒看到一个它不知道的报头,那么它只有两个选择: Reject或pass。在IPv4中,它还可以删除未知的扩展并传递其余的扩展。IMO此属性使设计的可扩展性更强,而不是更少。

票数 33
EN

Stack Overflow用户

发布于 2013-07-09 11:48:04

更新的RFC 6564涵盖了这种情况。它准确地展示了您所描述的场景,并为任何新的扩展标头(如果定义了任何扩展标头)提供了一种格式,至少在某些情况下,像您的中间盒将能够使用这些扩展标头。

请记住,它的目的不是通过创建新的扩展头来扩展IPv6,而是通过添加新的目的地选项。对于您来说,处理未知的目的地选项应该是微不足道的,或者至少要容易得多。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17518951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档