[英]Scapy: Layer derived from Packet with own init
是否可以使用自己的__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
這樣做有什么問題,我該如何編寫類以使其與一種構造函數一起使用?
天空是極限,您可以按自己喜歡的方式擴展或濫用船舷。 因此,是的,可以有自己的__init__
但是您必須重新實現一些簡單的代碼,或者至少調用超類以適合接口。 另外,您還必須將fields_desc
定義為類/實例var而不是__init__
本地var(即,將代碼更改為self.fields_desc
以使其成為實例var或明確地使其成為類var)。
但是,如果您只是嘗試為圖層字段分配值,最好不要重新發明輪子,而是使用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上下文(加密/密鑰)提供了一個隱藏字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.