Skip to main content
 首页 » 编程设计

python之根据另一个类的字段动态获取字段类型(使用Scapy工具-Python)

2025年05月04日9leader

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

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 

请您参考如下方法:

我相信 Scapy 最接近您想要的功能是条件字段。格式为:

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

尝试将其与 Packet.underlayer 结合使用。

假设层的设置像TemplateRecord()/DataRecord()

ConditionalField(IPField("ipsrc", "0.0.0.0"), lambda pkt:pkt.underlayer.Type==0), 
ConditionalField(IPField("ipdst", "0.0.0.0"), lambda pkt:pkt.underlayer.Type==1), 
ConditionalField(ByteField("DstMask", 0), lambda pkt:pkt.underlayer.Type==2)