scapy独立层,没有封装

时间:2011-07-04 13:35:49

标签: python scapy

我尝试创建一个协议,我有一些理解问题。一世 为每一层创建了一个类。然后我创建了一些构建的方法 通过将这些层一个堆叠在另一个上面来为我提供数据包。

创建数据包时:

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")

现在,我不确定“/”对于这种情况是否是正确的运算符。怎么样 我会以更好的方式做到吗?在我的协议中,层是独立的 而不是封装。

1 个答案:

答案 0 :(得分:2)

如果你不想在BarFoo,我不明白为什么你没有使用列表...例如这是一个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()])
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>)
>>

或者在你的情况下...... return [a, b]。这将提供两个不同的封装,而不是它们堆叠在协议层次结构中