创建有效载荷重用多个字段的scapy数据包协议

时间:2018-07-02 22:11:33

标签: python networking scapy pcap packets

我正在尝试为自己的船头创建协议,并且在最近几天一直处于卡住状态。

我要做的是将第一层的前14个字节用于dst mac,将6个用于sst mac,将2个用于填充。数据包的其余部分将是有效载荷。

问题是我不确定如何使数据包中的第5个字节和第6个字节成为可以提供ShortField值的字段。

class MyEther(Packet):

   name = "MyEther"

   fields_desc =[
          MACField("dst", None),
          MACField("src", None),
          StrLenField('padding', None, length_from=lambda x: 2)
   ]

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在这种情况下,不适合使用MACField。对于每个MACField,都应使用IntField,然后使用ShortField。

fields_desc = [
    IntField(“a”, 0),
    ShortField(“b”, 0), # here are your 5-6 bytes
    ....
]

但是,如果您真的知道自己在做什么,并且知道需要MACField,则可以使用

struct.unpack(“!H”, mac2str(packet.dst)[4:6])

(mac2str是从scapy导入的)