ICMP

class os_ken.lib.packet.icmp.TimeExceeded(data_len=0, data=None)

用于时间超出消息的 ICMP 子编码器/解码器类。

与 os_ken.lib.packet.icmp.icmp 一起用于 ICMP 时间超出消息。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

[RFC4884] 引入了 8 位数据长度属性。

属性

描述

data_len

数据长度

data

互联网报头 + 原始数据报的前导字节

class os_ken.lib.packet.icmp.dest_unreach(data_len=0, mtu=0, data=None)

用于目标不可达消息的 ICMP 子编码器/解码器类。

与 os_ken.lib.packet.icmp.icmp 一起用于 ICMP 目标不可达消息。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

[RFC1191] 保留了“下一跳 MTU”字段的位。[RFC4884] 引入了 8 位数据长度属性。

属性

描述

data_len

数据长度

mtu

下一跳 MTU

注意:当 icmp 代码为 4 时,此字段是必需的

代码 4 = 需要分片且设置了 DF

data

互联网报头 + 原始数据报的前导字节

class os_ken.lib.packet.icmp.echo(id_=0, seq=0, data=None)

用于回显和回显应答消息的 ICMP 子编码器/解码器类。

与 os_ken.lib.packet.icmp.icmp 一起用于 ICMP 回显和回显应答消息。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

id

标识符

seq

序列号

data

互联网报头 + 原始数据数据报的 64 位

class os_ken.lib.packet.icmp.icmp(type_=8, code=0, csum=0, data=b'')

ICMP (RFC 792) 报头编码器/解码器类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

type

类型

code

代码

csum

校验和(0 表示编码时自动计算)

data

有效载荷。可以是字节数组,也可以是 os_ken.lib.packet.icmp.echo 或 os_ken.lib.packet.icmp.dest_unreach 或 os_ken.lib.packet.icmp.TimeExceeded 对象 注意对于 icmp.echo:这包括“未用”的 16 位以及 ICMP 报头的“互联网报头 + 原始数据数据报的 64 位”。 注意对于 icmp.dest_unreach 和 icmp.TimeExceeded:这包括“未用”的 8 或 24 位以及原始数据包的“互联网报头 + 原始数据报的前导字节”。

classmethod parser(buf)

解码协议头。

此方法仅在解码数据包时使用。

在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:

  • 一个描述解码后的头对象。

  • 一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。

  • 数据包的其余部分。

serialize(payload, prev)

编码协议头。

此方法仅在编码数据包时使用。

编码协议头。返回一个包含头的字节数组。

payload 是将立即跟随此头的其余数据包。

prev 是外部协议头的 packet_base.PacketBase 子类。如果当前头是外部头,则 prev 为 None。例如,对于 tcp.serialize,prev 是 ipv4 或 ipv6。