如何使用dispatch_hook()链接不同层。我有这样的包裹。我只想知道是否有更好的方法使用dispatch_hook()来完成此操作。在
这就是我如何制作我的包裹:
>>>> pkt=PCEPCommonHeader(Type=6)/PCEPErrorMsg(error_objects=[PCEPErrorObject()])
>>> pkt.show()
###[ PCEP common header ]###
Version= 1
Flags= 0
Type= PCEPErrorMsg
Length= None
###[ PCEPErrorMsg ]###
\error_objects\
|###[ PCEP-ERROR OBJECT ]###
| \common_object_header\
| |###[ PCEP Common Object Header ]###
| | oclass= PCEP-ERROR
| | oType= 1
| | resflags=
| | pflag=
| | iflag=
| | obLength= 4
| Reserved= 0
| flags= 0
| ET= 0
| EV= 0
>>>
代码剪贴:
^{pr2}$
.dispatch_hook()
背后的思想是有一个主类,我们称它为Protocol
,它继承(直接或不)自Packet
,并有派生类(直接或不继承自Protocol
或{Protocol1
和{当您(或Scapy)通过调用
Protocol()
实例化类时,将调用.dispatch_hook()
方法。它使用与传递给Protocol()
的完全相同的参数进行调用,并返回将要(真正)使用的类。在让我们举一个真实的例子,来自Scapy代码。
Ether()
(Ethernet v2)和Dot3()
()是非常相似的第二层协议:都以6字节的目的地址开始,然后是6字节的源地址。Ether()
接下来的两个字节是有效负载的类型,而Dot3()
接下来的两个字节是包的大小。因为一个数据包不能超过1500个字节,而且以太网类型不能少于1500个(至少要精确到1536个)。在来自Scapy代码(文件
scapy/layers/l2.py
):如果需要,可以找到一个更复杂和完整的示例in TorPylle,它是Scapy中TOR协议的实现。在
相关问题 更多 >
编程相关推荐