IPv4

class os_ken.lib.packet.ipv4.ipv4(version=4, header_length=5, tos=0, total_length=0, identification=0, flags=0, offset=0, ttl=255, proto=0, csum=0, src='10.0.0.1', dst='10.0.0.2', option=None)

IPv4 (RFC 791) 头部编码/解码类。

注意:在解码时,即使对于分片的数据报,此实现也会尝试解码上层协议。这可能不是用户想要的。

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

属性

描述

示例

版本

版本

header_length

IHL

tos

服务类型

total_length

总长度(0 表示在编码时自动计算)

identification

标识

flags

标志

offset

分片偏移

ttl

生存时间

proto

协议

csum

头部校验和(在编码时忽略并自动计算)

src

源地址

'192.0.2.1'

dst

目标地址

'192.0.2.2'

option

包含整个选项的字节数组,如果没有选项则为 None

classmethod parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

serialize(payload, prev)

编码协议头。

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

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

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

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