在Scapy中访问具有lambda函数的较低层字段

时间:2015-10-21 13:45:32

标签: python layer scapy

我想做类似以下的事情

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字段。但是我有必要访问存储在较低层的值。在我试图实现的协议中,需要这样做。那我怎么能这样做呢?

1 个答案:

答案 0 :(得分:3)

低层或左层称为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")
                   ]