Python scapy独立层,无封装

Python scapy独立层,无封装,python,scapy,Python,Scapy,我试图创建一个协议,但我在理解上有一些问题。我 为每个层创建一个类。然后我创建了一些方法来构建 我把这些包一层一层地叠在另一层上面 创建数据包时: a=Foo()/Bar() (or a=test()) 我得到的结果是: ,这意味着,据我所知 数据包被封装(例如IP()/ICMP() 感觉)。现在,我的问题是,我想要的东西更像: <Foo |> <Bar |> 现在,我不确定“/”是否是这种情况下的正确运算符。怎么 我会用更好的方式吗?在我的协议中,层是独立的 而且没

我试图创建一个协议,但我在理解上有一些问题。我 为每个层创建一个类。然后我创建了一些方法来构建 我把这些包一层一层地叠在另一层上面

创建数据包时:

a=Foo()/Bar() (or a=test())
我得到的结果是:

,这意味着,据我所知 数据包被封装(例如
IP()/ICMP()
感觉)。现在,我的问题是,我想要的东西更像:

<Foo |> <Bar |>
现在,我不确定“/”是否是这种情况下的正确运算符。怎么 我会用更好的方式吗?在我的协议中,层是独立的
而且没有封装。

如果您不想在
Foo
中使用
Bar
,我不明白您为什么不使用列表。。。例如,这是到10.2.2.2的两个ping的列表<代码>[IP(dst=“10.2.2.2”)/ICMP(),IP(dst=“10.2.2.2”)/ICMP()]

sr([IP(dst=“10.2.2.2”)/ICMP(),IP(dst=“10.2.2.2”)/ICMP())
开始排放:
已完成发送2个数据包。
......*
收到32个数据包,得到2个答案,剩余0个数据包
(, )
>>
或者在你的情况下<代码>返回[a,b]。这将提供两个不同的封装,而不是堆叠在协议层次结构中

#!/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")
sr([IP(dst="10.2.2.2") / ICMP(), IP(dst="10.2.2.2") / ICMP()])
Begin emission:
........................*Finished to send 2 packets.
......*
Received 32 packets, got 2 answers, remaining 0 packets
(<Results: TCP:0 UDP:0 ICMP:2 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
>>