gpt4 book ai didi

python - Scapy:从带有自己的 init 的 Packet 派生的层

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:54 24 4
gpt4 key购买 nike

是否可以使用自己的 __init__() 函数构建自己的层?我尝试这样做的方法是:

>>> class SomePacket(Packet):
... def __init__(self, number):
... fields_desc = [IntField("Number",number)]
...
>>> packet = SomePacket(1)
>>> ls(packet)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/scapy/packet.py", line 1213, in ls
if not isinstance(obj.payload, NoPayload):
File "/usr/lib/python2.7/dist-packages/scapy/packet.py", line 180, in __getattr__
raise AttributeError(attr)
AttributeError: payload

这样做有什么问题吗?我应该如何编写该类才能将其与某种构造函数一起使用?

最佳答案

天空是极限,您可以按照您喜欢的方式扩展或滥用 scapy。因此,是的,您可以拥有自己的 __init__但您必须重新实现一些 scapy 代码,或者至少调用父类(super class)来适应接口(interface)。此外,您还必须定义 fields_desc作为类/实例变量而不是 __init__本地变量(即将代码更改为 self.fields_desc 以使其成为实例变量或显式使其成为类变量)。

但是,如果您只是想为图层字段分配值,最好不要重新发明轮子并使用 scapy 的设计方式,因为它已经提供了 __init__就像界面一样。

class SomePacket(Packet):
fields_desc = [IntField("Number",1), # capital letters are not convenient
IntField("yournumber",1),]


packet = SomePacket(Number=1, yournumber=99)
packet.show()

结果:

###[ SomePacket ]###
Number = 1
yournumber= 99

这是我必须覆盖 __init__ 的唯一层。是一个 SSL/TLS 层,为跨多个层的 ssl 上下文(加密/ key )提供隐藏字段(用于解密,...)

关于python - Scapy:从带有自己的 init 的 Packet 派生的层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31336714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com