gpt4 book ai didi

python - scapy如何检查是否设置了一个字段

转载 作者:太空狗 更新时间:2023-10-30 01:24:04 26 4
gpt4 key购买 nike

我正在用 scapy 构建一个层。该层具有 ConditionalFields:

class Foo(Packet):
name = "Foo"
fields_desc = [
ConditionalField(BitField("bar1", None, 4),
lambda pkt: pkt.bar1 is not None),
ConditionalField(BitField("bar2", None, 4),
lambda pkt: pkt.bar2 is not None),

ByteField("bar3", 0x0),
ByteField("bar4", 0x0)
]

现在如何检查是否设置了 bar1?分别酒吧2?我写的 lambda 函数对我来说似乎是正确的,根据文档,它是这样使用的,但它不起作用。你知道我该如何解决这个问题吗?这个想法是,如果在我实例化类 Foo 时设置了 bar1bar2,它应该出现在数据包中,否则不会。我不想只为这种情况做 2 个数据包。

最佳答案

您没有将 ConditionalField 用于其预期目的。 ConditionalField 是一个字段,其存在取决于数据包中的某个other 字段。请参阅以下示例:

ConditionalField(XShortField("chksum",None),lambda pkt:pkt.chksumpresent==1)

请注意,"chksum" 字段的存在依赖于 "chksumpresent" 字段的值,而不是它本身。

使用两层可能是最好的方法(即使您试图避免这种情况)。您可以使用 guess_payload_class() 方法来帮助解决这个问题:http://trac.secdev.org/scapy/wiki/BuildAndDissect

您的问题很有趣(基本上是尝试将 is_present="None" 设置为指示字段是否应存在的指示符)。不幸的是,据我所知,Scapy 目前没有这个功能。

关于python - scapy如何检查是否设置了一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com