Packet library API Reference

Packet class

class os_ken.lib.packet.packet.Packet(data=None, protocols=None, parse_cls=<class 'os_ken.lib.packet.ethernet.ethernet'>)

一个数据包解码/编码类。

一个实例用于解码或编码单个数据包。

data 是一个字节数组,用于描述要解码的原始数据报。在解码时,Packet 对象是可迭代的。迭代值是协议(以太网、ipv4 等)头部和有效负载。协议头部是 packet_base.PacketBase 的子类的实例。有效负载是一个字节数组。它们按照在网络上的顺序进行迭代。

在编码数据包时,应省略 data

add_protocol(proto)

为该数据包注册一个协议 proto

只有在编码数据包时才能使用此方法。

在编码数据包时,注册一个协议(以太网、ipv4 等)头部以添加到此数据包。协议头部应在调用 self.serialize 之前按照在网络上的顺序注册。

classmethod from_jsondict(dict_, decode_string=<function b64decode>, **additional_args)

从 JSON 样式的字典创建实例。

使用字典中指定的参数实例化此类。

此方法接受以下参数:

参数

描述

dict_

一个描述参数的字典。例如,{"Param1": 100, "Param2": 200}

decode_string

(可选) 指定如何解码字符串。默认值为 base64。此参数仅用于没有在 _TYPE 类属性中显式类型注释的属性。

additional_args

(可选) 构造函数的其他关键字参数。

get_protocol(protocol)

返回与指定协议匹配的第一个协议。

get_protocols(protocol)

返回与指定协议匹配的协议列表。

serialize()

编码一个数据包并将结果字节数组存储在 self.data 中。

只有在编码数据包时才能使用此方法。

Stream Parser class

class os_ken.lib.packet.stream_parser.StreamParser

流解析器基类。

该类的子类的实例用于从原始字节流中提取消息。

它被设计用于从不保留消息边界的传输读取的数据。一个典型的例子是 TCP。

exception TooSmallException
parse(data)

尝试从原始字节流中提取消息。

data 参数是新从输入流读取的 python 字节。

返回提取的消息的有序列表。它可以是一个空列表。

剩余的数据,无法生成完整消息,将保留在内部,并在下次调用此方法时使用。

abstract try_parse(q)

尝试从给定的字节中提取消息。

这是子类覆盖点。

此方法尝试从参数给定的字节中提取消息。

如果给定的数据不足以提取完整消息,但以后有更多数据到达时仍有机会提取消息,则引发 TooSmallException。

子类列表

Protocol Header classes