我尝试创建一个协议,但我有一些理解问题。我为每一层创建了一个类。然后我创建了一些为我构建数据包的方法,通过将层堆叠在另一个之上。
当我创建一个数据包时:
a=Foo()/Bar() (or a=test())
我得到类似的东西:
<Foo | <Bar |>>
,这意味着,据我了解,数据包是封装的(例如IP()/ICMP()
在有意义的地方)。现在,我的问题是我想要更多类似的东西:
<Foo |> <Bar |>
我究竟做错了什么?下面是我使用的代码(简化版):
#!/usr/bin/env python
import logging
logging.getLogger("scapy").setLevel(1)
from scapy.all import *
class Foo(Packet):
name = "Foo packet"
fields_desc = [
ByteField("foo1", 0x23)
]
class Bar(Packet):
name = "Bar packet"
fields_desc = [
ByteField("bar1", 0x42)
]
def test():
a=Foo()
b=Bar()
return a/b
if __name__ == "__main__":
interact(mydict=globals(), mybanner="test-env")
现在,我不确定“/”是否是这种情况下的正确运算符。我将如何以更好的方式做到这一点?在我的协议中,这些层是独立的,没有被封装。