我正在尝试为自己的船头创建协议,并且在最近几天一直处于卡住状态。
我要做的是将第一层的前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)
]
非常感谢您的帮助!
答案 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导入的)