在 scapy 中构建自定义协议

问题描述 投票:0回答:0

我一直在尝试创建一个包含一系列数据包的自定义协议。我关心的是如何根据列表中的数据包数量调整协议的大小。

代码如下:

class MyCommand(Packet):
    name = "My Command"
    fields_desc = [
        ShortField("field1", 0x0000),
        ShortField("field2", 0x0000)
    ]
class MyProtocol(Packet):
    name = "My Protocol"
    fields_desc = [
        FieldLenField("len", 6, length_of="commands", count_of="commands", fmt="H"),
        PacketListField("commands", [], MyCommand, length_from=lambda pkt: pkt.len),
    ]

我的目标是计算协议的长度如下: length = 6 + 4 * n,其中 n 是命令的数量。

不幸的是,到目前为止,我一直无法实现这一目标。每当我创建 MyProtocol 的实例时,大小都固定为 6,并且不反映列表中命令的数量。

注意* 我希望在实例化 MyProtocol 的对象时自动进行长度计算。

我试图通过使用以下代码来解决这个问题:

FieldLenField("len", 6, length_of="commands", count_of="commands", fmt="H"), PacketListField("commands", [], MyCommand, length_from=lambda pkt: pkt.len),

另外,我尝试过使用post build的方式来解决这个问题,但是没有成功

python scapy
© www.soinside.com 2019 - 2024. All rights reserved.