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。