在浏览scapy源代码(https://github.com/jwiegley/scapy)时,我发现没有以太, IP , TCP , UDP 或任何其他协议类包含任何__init__方法,也没有任何带 @classmothod 注释的类方法。所有这些类都继承了 Packet 类,其中包含__init__方法。
代码结构如下:
class Ether(Packet):
# class methods
class IP(Packet, IPTools):
# class methods
# Other protocol classes
所以,我想知道在创建这样的数据包时如何创建这个类的实例:
packet = Ether()/IP()/TCP()
我能理解" /"符号。 Packet类已重写__rdiv __()方法,并且由于所有这些类都是Packet的子类,因此调用其父Packet实例的__rdiv __()。
但是,我是如何创建这些类的实例的。
此外, IP 类可以像这样创建
ip = IP(src="10.0.0.1")
因为,IP没有任何__init__方法,这种初始化是如何实现的?
作为参考,数据包类的__init__如下所示:
def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
# initialization code
任何帮助将不胜感激。