Как мне установить поле payload_length нижнего уровня с размером верхнего уровня?
import binascii
from scapy.all import *
payload_types = {0: "Upper0", 1: "Upper1"};
class Lower(Packet):
fields_desc = [
XShortEnumField("payload_type", 0, payload_types),
IntField("payload_length", 0) ];
class Upper0(Packet):
fields_desc = [
IntField("data", 0)
]
bind_layers(Lower, Upper0, payload_type=0)
class Upper1(Packet):
fields_desc = [
IntField("data0", 0),
IntField("data1", 0)
]
bind_layers(Lower, Upper1, payload_type=1)
p0=Lower()/Upper0(data=1)
p1=Lower()/Upper1(data0=1,data1=2)
print(binascii.b2a_hex(bytes(p0))) # 00000000000000000001
print(binascii.b2a_hex(bytes(p1))) # 0001000000000000000100000002
Здесь bind_layers
перегружает payload_type
нижнего уровня, однако, как я могу подключить точки ктакже установить payload_length
? p0.payload_length должно быть 4, в то время как p1.payload_length должно быть 8. Есть примеры слоев, которые реализуют это, на что я мог бы взглянуть?