Ich habe die nächste Situation erreicht, ich muss eine neue Protokollschicht in Scapy definieren und eines der Felder hat eine variable Größe (1,2,3 oder 4 Bytes), die davon abhängt die Größe einer anderen spezifischen Ebene. Dies ist die Situation:Scapy - Referenzieren mehrerer Felder von einem FieldLenField
class newLayer(Packet):
name = "newLayer fixed header"
fields_desc = [
ByteField("msgtype",0),
# Some other fields ...
FieldLenField("length", XXX), # length of newLayer_specific layer
# This field can be 1,2,3 or 4 bytes long depending
# on the length of the variable header
]
class newLayer_specific(Packet):
name = "variable header"
fields_desc = [
FieldLenField("length2","field1"), # This field is always 2 bytes long
StrLenField("field1","",length_from = lambda pkt:pkt.length2),
StrLenField("field2","", length_from = lambda pkt:pkt.underlayer.length - pkt.length - 2)
# 2 is because the length of the length2 field
bind_layers(newLayer, newLayer_specific, msgtype=1)
Ich weiß nicht, wie ich auf die Größe der newLayer_specific
Schicht aus dem Bereich length
der Schicht newLayer
Jeder Vorschlag beziehen kann? Danke im Voraus.
Vielen dank Pierre beiden Lösungen korrekt funktionieren, ehrfürchtiges Wissen! – somarhs