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