访问下层与Scapy的lambda函数字段

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

我想要做的事,如以下

class Upper(Packet):

    name = "UpperLayer"
    fields_desc = [
        ConditionalField(IntField("Field",0xABCDEF00),
                         lambda pkt: pkt[IP].src == "1.2.3.4")
                   ]

p = IP(src="1.2.3.4")/Upper()

但是,这并不工作 - 我认为,因为上层Upper没有关于低IP层信息,因此无法访问src领域。但是,我有必要访问存储在下层的值。在这我想实现的正是这种需要的协议。所以,我怎么能做到这一点?

python layer scapy
1个回答
3
投票

的较低或leftbound层称为underlayer。这里是你要搜索的内容:

class Upper(Packet):
    name = "UpperLayer"
    fields_desc = [
        ConditionalField(IntField("Field",0xABCDEF00),
                         lambda pkt: hasattr(pkt.underlayer,"src") and pkt.underlayer.src == "1.2.3.4")
                   ]
© www.soinside.com 2019 - 2024. All rights reserved.