根据另一个类中的字段动态获取字段类型(使用scapytool Python)

2024-10-03 21:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何根据另一个类的字段动态地定义一个类的字段类型??? 我指的是如何定义一个字段并将其从一个类链接到另一个类,例如:

class TemplateRecord(Packet):
    name = "Template Record"
    fields_desc = [ ShortField("Type", 0),
                    ShortField("Length", 0) ]

    def extract_padding(self, s):
            return "", s


class DataRecord(Packet):
    name = "Data Record"
    fields_desc = [ ==> Here i would like something like this :

            "if Type == 0 from Class TemplateRecord:
                IPField("ipsrc", "0.0.0.0"),
            if Type == 1 from Class TemplateRecord
                IPField("ipdst", "0.0.0.0"),
            if Type == 2 from Class TemplateRecord
                                    ByteField("DstMask", 0),

            ....etc..." 

        ]
    def extract_padding(self, s):
            return "", s

Tags: namefromfieldsif定义packetdeftype
2条回答

也可以使用bind_layers函数添加条件层。 步骤:

  1. 定义主pkt模板类(TemplateRecord)
  2. 定义子pkt类(DataRecord1表示类型=1)
  3. 使用bind_layers有条件地绑定2个包层。在

您的案例的语法是:

bind_layers(TemplateRecord, DataRecordForType1, {'Type':1})

我相信Scapy最接近你想要的特性就是条件场。格式为:

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

尝试将此与包.底层. 在

假设层的设置类似于TemplateRecord()/DataRecord()

^{pr2}$

相关问题 更多 >