Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

Development/PcapngCustom

块条目类型

| 编号 | 名称 | 描述 | 0 | 保留 | 未使用。 | 1 | 文件首选项 | 包含整个文件的某些首选项(不是按 SHB section),定义见后文。 | 2 | 解密密钥 | 包含解密密钥信息,用于解密 packet 内容,定义见后文。

选项条目类型

请注意,即使这些选项位于我们的某个 Custom Block 内部,它们仍然使用 Custom Option 进行编码,因此也带有我们的 PEN 编号。

由于 Option Entry Types 有 40 亿个编号,因此没有必要为每种块类型设置不同的编号空间;相反,我们可以在所有 Block Entry Types 中保留某个给定的 Option Entry Type 编号。

0:保留

未使用。

1:显示过滤器

一个 UTF-8 字符串,表示要应用的显示过滤器,使用 Wireshark 显示过滤器语法。请注意,这是一个用于限制显示内容的显示过滤器,但文件中可能还有其他不匹配此过滤器的 packet。

示例:"http && tcp.port == 8080"

2:保存过滤器

一个 UTF-8 字符串,表示用于限制文件中条目的显示过滤器,使用 Wireshark 显示过滤器语法。

示例:"http && tcp.port == 8080"

3:着色过滤器

一个 UTF-8 字符串,表示要应用的着色过滤器规则,使用 Wireshark 着色过滤器语法。这个选项当然可以重复多次。

示例:"@sip@sip@[11384,50442,58072][65535,65535,65535]"

4:Decode-as 首选项

一个 UTF-8 字符串,其格式待定。

5:解密密钥 ID

此选项添加到 EPB 中,是一个 uint32,用于标识此 packet 在此 SHB section 中使用的 Decryption Key Block。(即类似于 IDB 的 Interface ID)如果某个加密发生在不同于另一个加密的层上(例如 TLS over IPSEC),同一个 EPB 中可以有多个此类选项。

示例:'0'

6:解密密钥值

一个可变长度的字节序列,表示此选项在 Decryption Key Block 中使用的实际解密密钥。

7:解密密钥 IV

一个可变长度的字节序列,表示初始化向量(如有必要);此选项用于 Decryption Key Block。

8:MAC 密钥

一个可变长度的字节序列,表示消息认证密钥(如有必要);此选项用于 Decryption Key Block。

文件编码格式

字节序

为了跨平台工作且避免字节序混淆,Entry 中的所有字段,包括 Entry Type 编号字段,都以小端格式编码。

请注意,Entry-specific Data 中的二进制 IPv4 地址将编码为四个单独的字节,而不是 uint32(因此也可以认为这是网络字节序/大端),这也是 Wireshark 内部通常存储 IPv4 地址的方式。

对齐

Entry 中的内部字段不进行填充,也不提供特定的对齐保证。当然,在 pcapng 文件中编码时,Block 或 Option 中的整个 Entry 会被填充,但这是由较低层的 pcapng writer 透明完成的。

Wireshark 自定义块

 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 +---------------------------------------------------------------+ 0 | Block Type = 0x00000BAD or 0x40000BAD | +---------------------------------------------------------------+ 4 | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 8 | Wireshark Private Enterprise Number (PEN) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+12 | Block Entry Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+16 | Block Entry Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+20 / / / Block Entry-specific Data / / variable length, padded to 32 bits / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +---------------------------------------------------------------+

Block Entry Length 定义 Block Entry-specific Data 的长度(以字节为单位),不包括填充。此字段用于确定填充字节数,以及是否存在 Options。

文件首选项条目

File Preferences Entry 包含整个文件的某些首选项(不是按 SHB section)。每个文件只能有一个这样的条目;额外的条目会被忽略。此块应出现在第一个 SHB 之后、第一个 packet block(EPB/SPB)之前。此块中的必填字段是:major、minor 和 revision 版本号。其他所有内容都作为选项处理。

对于 Wireshark Custom Block 的 "Block Entry-specific Data" 部分,File Preference Entry 的格式如下:

 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Major Version | Minor Version | Revision |+---------------------------------------------------------------+

Major Version:创建这些首选项的 Wireshark 主版本号,一个 uint16。

Minor Version:创建这些首选项的 Wireshark 主版本号,一个 uint8。

Revision:创建这些首选项的 Wireshark revision 版本号,一个 uint8。

解密密钥条目

Decryption Key Entry 包含解密密钥信息,用于解密由此块中的选项以及相应 EPB block 中的选项标识的 packet 内容。每个 SHB section 中可以出现多个此 Decryption Block,每个对应一个不同的解密密钥。此块的作用域仅限于其 SHB section,因此使用 0x40000BAD block type code,含义是“如果不理解我,则不要复制”。

此块中的必填字段是:key type、packet layer type,以及给定 key type 和 layer type 所需的任何选项。例如,密钥本身位于 Decryption Key Value 选项中,IV 位于 Decryption Key IV 选项中,等等。

使用此项的每个 EPB 也会添加相关 Options,如 Options 部分所定义。

对于 Wireshark Custom Block 的 "Block Entry-specific Data" 部分,Decryption Key Entry 的格式如下:

 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Decryption Key Type | Packet Layer Type |+---------------------------------------------------------------+

Decryption Key Type:一个 uint16 类型编号,用于确定解密和认证所使用的算法。当前有效值为:

| 类型 | 含义 | 1 | AES 128-bit,CBC-mode,SHA-1 HMAC | 2 | AES 256-bit,CBC-mode,SHA-1 HMAC | x | ……此处还有更多……

(我们是否应该将 HMAC 与加密拆分开,而不是像上面那样组合?)

Packet Layer Type:一个 uint16 类型编号,用于帮助确定 packet 中哪个协议层使用此解密信息,并帮助排查问题。

| 类型 | 含义 | 1 | SSLv3 | 2 | TLSv1 | 3 | TLSv1.1 | x | ……此处还有更多……

Wireshark 自定义选项

 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+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Custom Option Code | Option Length |+---------------------------------------------------------------+| Wireshark Private Enterprise Number (PEN) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Option Entry Type |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+/ Option Entry-specific Data // variable length, padded to 32 bits /+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Custom Option Code 编号是 pcapng 中为 Custom Options 定义的编号之一,可以是字符串或二进制,也可能设置了 do-not-copy 位。

导入自 https://wiki.wireshark.org/Development/PcapngCustom,时间为 2020-08-11 23:12:59 UTC

相关 Wireshark Wiki 页面

网络分析技术档案