小编Ada*_*nko的帖子

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

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

所以我正在深入阅读有关IPv6数据包格式的文章,我有点......好吧......我不得不一遍又一遍地阅读它,以确保我实际上正确地阅读它.在我看来,你必须从40字节的固定标头开始,看看它的下一个标题字段.然后你必须查看下一个标题的下一个标题字段,依此类推,就像一个链表,直到你到达结尾.如果有有效载荷,它将随之而来.

问题是固定标头或扩展标头中没有长度字段.您必须有一个扩展标题类型及其大小的表,以便您可以追踪此链接列表到最后.

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

那么如果我不知道他们正在使用的扩展,我该如何解析IPv6头?如何跳过未知扩展名的标题,因为我不知道它的长度?

ip networking ipv6

111
推荐指数
3
解决办法
4万
查看次数

我可以使用C样式转换将派生类转换为私有基类吗?

我可以这样做吗?

class A { ... };

class B : private A
{
    const A &foo() const
    {
        return *((const A *)this);
    }
};
Run Code Online (Sandbox Code Playgroud)

我可以从基类中私有地继承并将其强制转换为其基类的公共版本吗?如果没有虚拟方法,我可以这样做吗?

我的猜测是肯定的,但我想确保它安全/便携.

c++ casting upcasting private-inheritance

20
推荐指数
2
解决办法
2974
查看次数

标签 统计

c++ ×1

casting ×1

ip ×1

ipv6 ×1

networking ×1

private-inheritance ×1

upcasting ×1