在 Scapy 中使用 lambda 函数访问较低层字段
Accessing a lower layers fields with lambda function in 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
字段。但是我有必要访问存储在较低层中的值。在我试图实现的协议中,这是必需的。那我该怎么做呢?
下层或左层称为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")
]
我想做类似下面的事情
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
字段。但是我有必要访问存储在较低层中的值。在我试图实现的协议中,这是必需的。那我该怎么做呢?
下层或左层称为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")
]