在我的程序中,我使用 scapy 创建/解析数据包,但实际程序是 C++ 中的。由于用户只需要 ICMPv6 的前几个字段,这些字段对于所有 ICMPv6 数据包都是相同的,因此我在 C++ 端创建了一个 ICMPv6 类(使用 ICMPv6Unknown)。
我的问题是,虽然它们可以很好地处理 ICMPv6 的字段,但 IPv6 中的 plen 字段没有根据我放入 ICMPv6 标头的类型正确更新。
我不确定我可以在 IPv6 类中编辑什么以使其根据接下来的 ICMPv6 类型更改字段,现在它可以:
def post_build(self, p, pay):
p += pay
if self.plen is None:
l = len(p) - 40
p = p[:4]+struct.pack("!H", l)+p[6:]
return p
失败是因为 ICMPv6Unknown 返回 len 为 4,因此它不会根据我的类型字段更改大小。我知道以太会根据字段更改类型,但我无法为 ICMPv6 重现此内容