我一直在尝试创建一个包含一系列数据包的自定义协议。我关心的是如何根据列表中的数据包数量调整协议的大小。
代码如下:
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的方式来解决这个问题,但是没有成功