我想知道如何使用Scapy根据不同的字段类型/长度来剖析有效负载。
例如,我有这个=>
|###[ Raw ]###
| | load='\x00!\x92(\x00!\x92(\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x01\x00\x00\xc0\xa8\x03\x01\xc0\xa8\x03\x02\x01\xc0\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x18\x18\x10\x00\x00\x00\x00\x00'
我想逐步划分每个部分:第一部分为2字节/第二部分为4字节等...
实际上,我使用Scapy添加了一个新协议,但最后一部分管理非常复杂,这就是为什么我选择/尝试以这种方式剖析有效载荷的最后部分(上图)。
答案 0 :(得分:2)
在Scapy中剖析复杂协议的最佳方法是了解所有可用字段(鉴于其糟糕的文档,这可能很难)。
Scapy支持的字段列表:http://trac.secdev.org/scapy/wiki/Fields
特别要看ConditionalField:
ConditionalField(XShortField("chksum",None),lambda pkt:pkt.chksumpresent==1)
另外,了解如何在Scapy解剖过程中使用guess_payload_class()来选择不同的层。如果你想以小部分(2字节/ 4字节等)剖析它,可以考虑为每个部分创建一个图层并使用guess_payload_class()。 http://trac.secdev.org/scapy/wiki/BuildAndDissect
如果你有一个关于如何剖析某些领域的更具体的问题,我可以尝试回答它,但是现在这是我能为你的一般问题提供的最佳建议。希望它有所帮助。