2015-10-21 92 views
0

lambda表達式字段我想要做類似下面的訪問一個低層與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

較低層或左邊層稱爲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") 
        ]