我想要做的事,如以下
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
领域。但是,我有必要访问存储在下层的值。在这我想实现的正是这种需要的协议。所以,我怎么能做到这一点?
的较低或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")
]