1

如何将下层的 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重载,但是我怎样才能连接这些点来设置?p0.payload_length 应该是 4 而 p1.payload_length 应该是 8。我可以看看有没有实现这个的层示例?payload_typepayload_length

4

0 回答 0