DHCP6

DHCPv6 数据包解析器/序列化器

[RFC 3315] DHCPv6 数据包格式

下图说明了客户端和服务器之间发送的 DHCP 消息的格式

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    msg_type   |               transaction_id                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                            options                            .
.                           (variable)                          .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

有两种中继代理消息,它们共享以下格式

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    msg_type   |   hop_count   |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
|                                                               |
|                         link_address                          |
|                                                               |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
|                               |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
|                                                               |
|                         peer_address                          |
|                                                               |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
|                               |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
.                                                               .
.            options (variable number and length)   ....        .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
class os_ken.lib.packet.dhcp6.dhcp6(msg_type, options, transaction_id=None, hop_count=0, link_address='::', peer_address='::')

DHCPv6 (RFC 3315) 头部编码器/解码器类。

序列化的数据包看起来像以下部分中描述的那样。

  • RFC 3315 DHCP 数据包格式

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

属性

描述

msg_type

标识 DHCP 消息类型

transaction_id

对于未中继的消息:此消息交换的事务 ID。

hop_count

对于中继的消息:已中继此消息的中继代理的数量。

link_address

对于中继的消息:服务器将用于标识客户端所在链路的全局或站点本地地址。

peer_address

对于中继的消息:从其中接收要中继的消息的客户端或中继代理的地址。

选项

此消息中携带的选项

classmethod parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

serialize(payload=None, prev=None)

编码协议头。

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

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

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

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

class os_ken.lib.packet.dhcp6.option(code, data, length=0)

DHCP (RFC 3315) 选项编码器/解码器类。

这与 os_ken.lib.packet.dhcp6.dhcp6.options 一起使用。

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

DHCP 选项的格式是

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          option-code          |           option-len          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          option-data                          |
|                      (option-len octets)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

属性

描述

option-code

一个无符号整数,用于标识此选项中携带的特定选项类型。

option-len

一个无符号整数,以八位字节为单位,给出此选项中的 option-data 字段的长度。

option-data

选项的数据;此数据的格式取决于选项的定义。

class os_ken.lib.packet.dhcp6.options(option_list=None, options_len=0)

DHCP (RFC 3315) 选项编码器/解码器类。

这与 os_ken.lib.packet.dhcp6.dhcp6 一起使用。