【发布时间】:2020-06-03 14:47:02
【问题描述】:
我正在尝试将一个字段添加到一个类型依赖于另一个字段值的数据包。 这些“类型”之一是 var 长度字符串,如果适用,还有一个附加的“len”属性。
考虑以下示例:
from scapy.all import *
class TestPacket(Packet):
fields_desc=[
ShortField("index", 0),
ByteEnumField("type", 0 , { 1: "String", 2: "Integer" }),
ConditionalField(FieldLenField("len", None, length_of="data"), lambda x: x.type==1),
ConditionalField(StrLenField("data", "", length_from=lambda pkt:pkt.len), lambda x: x.type==7 or x.type==11),
ConditionalField(IntField("data", 1), lambda pkt: pkt.type==2)]
p = TestPacket(index=12, type=1, data="My Sample String")
p.show2()
p = TestPacket(index=13, type=2, data=5)
p.show2()
问题是“len”总是设置为 4(IntField 的长度,因为它是最后一个“data”条件字段)。
实现此功能的最佳方式是什么?具有不同名称的条件字段?将原始字节存储为 var 长度字符串,无论类型如何?
【问题讨论】:
标签: python python-3.x scapy