Как установить длину полезной нагрузки для нижнего уровня в Scapy - PullRequest
1 голос
/ 05 октября 2019

Как мне установить поле 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. Есть примеры слоев, которые реализуют это, на что я мог бы взглянуть?

...