Wireshark加载Lua插件分析DTLCP数据过程"

admin 2026-10-21 17:20:00 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

Wireshark加载Lua插件分析DTLCP数据过程

原创

利刃信安
利刃信安

利刃信安

2026年7月10日 13:00
北京

在小说阅读器读本章

去阅读

Wireshark加载Lua插件

分析DTLCP数据过程

Lua插件 · DTLCP协议解析 · UDP数据包分析 · Epoch/Sequence Number

01

PART

插件加载过程

PLUGIN LOADING PROCESS

1.1 启动扫描

Wireshark启动时,会自动扫描以下目录寻找Lua插件:

Windows系统:

%APPDATA%\Wireshark\plugins\ — 个人插件目录

C:\Program Files\Wireshark\plugins\ — 全局插件目录

Linux/Mac系统:

~/.wireshark/plugins/ — 个人插件目录

/usr/share/wireshark/plugins/ — 全局插件目录

1.2 初始化配置

Wireshark首先读取配置文件 init.lua ,检查关键配置:

...lua

disable\_lua = false -- 必须设置为false才启用Lua支持

run\_user\_scripts\_when\_superuser = false -- 安全控制

1.3 加载顺序

Wireshark 按以下顺序加载插件:

1 读取 init.lua 配置文件

2 检查Lua是否启用( disable\_lua 值)

3 按字母顺序扫描插件目录中的所有 .lua 文件

4 逐个执行Lua插件脚本

5 插件注册协议和解析器到Wireshark系统

02

PART

DTLCP Lua插件注册过程

DTLCP LUA PLUGIN REGISTRATION

2.1 协议对象创建

插件首先创建DTLCP协议对象,定义协议的基本信息:

...lua

local dtlcp\_protocol = Proto(\"DTLCP\", \"DTLCP协议\", \"数据报传输层密码协议\")

这告诉Wireshark:

协议名称: DTLCP

显示名称: DTLCP协议

协议描述: 数据报传输层密码协议

DTLCP与TLCP的区别:

特性 TLCP DTLCP
传输层 TCP UDP
协议标准 GB/T 38636-2020 GM/T 0128-2023
数据包格式 TLS Record格式 DTLCP Record格式(含epoch/seq)
连接特性 有连接、可靠 无连接、需重传机制

2.2 字段定义

接着定义DTLCP协议中包含的所有字段,相当于建立\"数据字典\":

...lua

local fields = dtlcp\_protocol.fields

-- DTLCP特有的字段结构(基于UDP)

fields.epoch = ProtoField.uint16(\"dtlcp.epoch\", \"Epoch\", base.HEX)

fields.sequence\_number = ProtoField.uint64(\"dtlcp.sequence\_number\", \"序列号\", base.HEX)

fields.content\_type = ProtoField.uint8(\"dtlcp.content\_type\", \"内容类型\", base.HEX)

fields.version = ProtoField.uint16(\"dtlcp.version\", \"协议版本\", base.HEX)

fields.length = ProtoField.uint16(\"dtlcp.length\", \"长度\", base.DEC)

fields.cipher\_suite = ProtoField.uint16(\"dtlcp.cipher\_suite\", \"密码套件\", base.HEX)

fields.signature = ProtoField.bytes(\"dtlcp.signature\", \"签名数据\")

DTLCP Record格式:

...record

DTLCP Record结构(共13字节头部):

┌──────────────┬──────────────────┬──────────────┬──────────────┬──────────────┬───────────────┐

│ 偏移0-1字节 │ 偏移2-7字节 │ 偏移8字节 │ 偏移9-10字节 │ 偏移11-12字节│ 偏移13+字节 │

│ Epoch (2B) │Sequence Number(6B)│Content Type(1B)│ Version (2B) │ Length (2B) │Fragment/Payload│

└──────────────┴──────────────────┴──────────────┴──────────────┴──────────────┴───────────────┘

DTLCP Content Type定义:

...lua

-- DTLCP消息类型常量

local CONTENT\_TYPE = {

CHANGE\_CIPHER\_SPEC = 0x14, -- 密码切换

ALERT = 0x15, -- 告警

HANDSHAKE = 0x16, -- 握手

APPLICATION\_DATA = 0x17, -- 应用数据

}

关键字段说明:

Epoch :会话周期标识(握手成功后epoch递增)

Sequence Number :48位序列号(防重放攻击)

Content Type :消息类型(Handshake/AppData/Alert等)

2.3 解析器注册

DTLCP基于UDP,需要注册到UDP端口:

...lua

-- 注册到UDP端口(DTLCP通常使用自定义UDP端口)

local udp\_table = DissectorTable.get(\"udp.port\")

udp\_table:add(443, dtlcp\_protocol) -- 监听UDP 443端口

udp\_table:add(9000, dtlcp\_protocol) -- 监听UDP 9000端口(示例)

DTLCP端口监听策略:

DTLCP通常使用自定义UDP端口(非标准443)

可以监听多个UDP端口(测试环境可能使用不同端口)

支持动态端口配置(通过Preference设置)

03

PART

DTLCP数据包解析过程

DTLCP PACKET PARSING PROCESS

3.1 数据包到达触发

当Wireshark捕获到符合条件的UDP数据包时,会自动调用已注册的DTLCP插件解析器。

触发条件:

...trigger

UDP端口匹配 → 协议识别 → 触发DTLCP解析器

例:UDP端口443或9000 → 数据包到达 → 调用dtlcp\_protocol.dissector

3.2 解析器接收参数

DTLCP解析器函数接收三个关键参数:

...lua

function dtlcp\_protocol.dissector(buffer, pinfo, tree)

-- buffer: DTLCP Record数据字节流(从DTLCP头部开始,不包含UDP/IP/Ethernet头部)

-- pinfo: 包信息(序号、时间、源/目标UDP端口等)

-- tree: 协议树(用于添加DTLCP解析结果)

end

参数说明:

pinfo.src\_port 和 pinfo.dst\_port — UDP源端口和目标端口

buffer:len() — DTLCP Record数据总长度(从Epoch开始到数据包结束)

buffer参数指向DTLCP Record起始位置,不包括UDP/IP/Ethernet头部

3.3 DTLCP数据读取与解析

DTLCP解析器按GM/T 0128-2023标准逐字节读取数据:

安全检查(必须):

...lua

function dtlcp\_protocol.dissector(buffer, pinfo, tree)

-- 安全检查:buffer必须至少有13字节(DTLCP头部)

if buffer:len() < 13 then

return

end

-- 然后再读取字段

local epoch = buffer(0, 2):uint()

-- ...

end

完整解析步骤:

...parsing

第1步:读取DTLCP Record头部(固定13字节)

├─ Epoch (0-1字节) → buffer(0, 2):uint()

├─ Sequence Number (2-7字节) → buffer(2, 6):uint64() -- 读取6字节,按uint64解析

├─ Content Type (8字节) → buffer(8, 1):uint()

├─ Version (9-10字节) → buffer(9, 2):uint()

└─ Length (11-12字节) → buffer(11, 2):uint()

第2步:根据Content Type判断消息类型

├─ 0x14 (ChangeCipherSpec) → 解析密码切换

├─ 0x15 (Alert) → 解析告警消息

├─ 0x16 (Handshake) → 解析握手消息

└─ 0x17 (Application Data) → 解析应用数据

第3步:解析Fragment/Payload(变长,根据Length字段)

├─ 读取Length指定的字节数 → buffer(13, length)

├─ 如果是加密数据,解析加密结构

└─ 如果是握手消息,解析握手子消息

第4步:特殊字段处理

├─ 加密Record:解析IV + 密文 + MAC/AuthTag

├─ 握手Record:解析Handshake Header + 消息内容

└─ 分片处理:DTLCP支持消息分片传输

3.4 DTLCP特有的解析逻辑

Epoch和Sequence Number处理:

...lua

-- Epoch标识会话周期

local epoch = buffer(0, 2):uint()

if epoch == 0 then

-- Epoch 0:握手阶段,明文传输

subtree:add(fields.epoch, buffer(0, 2)):append\_text(\" (握手阶段)\")

else

-- Epoch > 0:加密传输阶段

subtree:add(fields.epoch, buffer(0, 2)):append\_text(\" (加密阶段)\")

end

-- Sequence Number防重放

local seq\_num = buffer(2, 6):uint64() -- 读取6字节序列号,按uint64解析

subtree:add(fields.sequence\_number, buffer(2, 6))

-- 验证序列号是否递增(防重放攻击)

UDP分片处理:

DTLCP基于UDP,可能需要处理消息分片:

...lua

-- DTLCP消息分片处理(示例)

local function handle\_fragment(subtree, buffer, offset, length)

local fragment\_tree = subtree:add(buffer(offset, length), \"Fragment\")

fragment\_tree:append\_text(\" (可能包含分片信息)\")

end

3.5 结果添加到协议树

DTLCP解析出的每个字段都添加到Wireshark的协议树中显示:

...lua

-- 创建DTLCP协议树

local subtree = tree:add(dtlcp\_protocol, buffer())

-- 添加DTLCP Record头部

subtree:add(fields.epoch, buffer(0, 2))

subtree:add(fields.sequence\_number, buffer(2, 6))

subtree:add(fields.content\_type, buffer(8, 1))

subtree:add(fields.version, buffer(9, 2))

subtree:add(fields.length, buffer(11, 2))

-- 添加Payload/Fragment

if length > 0 then

local payload\_tree = subtree:add(buffer(13, length), \"Payload\")

-- 根据Content Type继续解析...

end

Wireshark界面显示DTLCP解析结果:

...display

DTLCP Protocol (UDP Port 443)

├─ Epoch: 0x0001 (加密阶段)

├─ Sequence Number: 0x000000000001 (防重放)

├─ Content Type: 0x17 (Application Data)

├─ Version: 0x0101 (DTLCP 1.1)

├─ Length: 64 bytes

└─ Payload:

├─ IV: 16 bytes (SM4-CBC加密)

├─ Encrypted Data: 48 bytes

└─ MAC/AuthTag: 16 bytes (HMAC-SM3或SM4-GCM AuthTag)

04

PART

完整工作流程总结

COMPLETE WORKFLOW SUMMARY

4.1 DTLCP解析流程图

...flow

Wireshark启动

↓

读取init.lua配置

↓

扫描插件目录

↓

加载dtlcp\_analyzer.lua

↓

创建DTLCP协议对象

↓

定义DTLCP字段(epoch/seq/content\_type等)

↓

注册UDP端口解析器

↓

监听UDP网络端口

↓

捕获UDP数据包

↓

触发DTLCP解析器函数

↓

读取Epoch和Sequence Number

↓

判断Epoch阶段(握手/加密)

↓

读取Content Type

↓

根据类型解析Payload

↓

处理加密/分片逻辑

↓

添加到协议树显示

↓

用户查看DTLCP解析结果

4.2 关键环节说明(DTLCP特有)

环节 TLCP(TCP) DTLCP(UDP) 关键差异
传输层监听 TCP端口 UDP端口 UDP无连接,需监听多个端口
协议识别 TLS Record Header DTLCP Record Header DTLCP含epoch/sequence\_number
数据结构 ContentType+Version+Length Epoch+Seq+Type+Version+Length DTLCP头部多5字节(epoch+seq)
防重放机制 TCP序列号 DTLCP序列号(48位) UDP需显式序列号防重放
加密阶段标识 无显式标识 Epoch字段 Epoch标识握手完成与否
分片处理 TCP自动分片 DTLCP需手动处理分片 UDP需应用层分片重组

4.3 DTLCP数据包解析循环

对于每个捕获的UDP数据包,DTLCP解析器都会执行:

...loop

UDP包到达 → 解析器调用 → 读取epoch+seq → 判断阶段

→ 读取Content Type → 解析Payload → 处理分片/加密 → 显示结果

关键差异:

TLCP(TCP) :可靠传输,自动分片重组,无显式序列号

DTLCP(UDP) :无连接,需epoch/seq防重放,应用层分片处理

05

PART

实际应用示例:DTLCP协议解析

PRACTICAL APPLICATION EXAMPLE

5.1 DTLCP握手阶段解析

第一阶段:插件加载

...loading

Wireshark启动 → 读取init.lua → 扫描plugins目录

→ 发现dtlcp\_analyzer.lua → 执行脚本

→ 创建DTLCP Proto对象 → 定义epoch/seq等字段

→ 注册解析器到UDP端口(443/9000)

第二阶段:Epoch 0握手数据捕获

...handshake

UDP端口监听 → 捕获UDP数据包(epoch=0x0000)

→ 识别为DTLCP握手阶段 → 触发dtlcp\_analyzer解析器

→ 解析Epoch=0 → 明文传输阶段

→ 解析Content Type=0x16 (Handshake)

→ 解析握手消息(ClientHello/ServerHello等)

第三阶段:Epoch 1加密数据解析

...encrypted

握手完成 → Epoch递增为1 → 捕获UDP加密数据包

→ 解析Epoch=0x0001 → 加密传输阶段

→ 解析Sequence Number → 验证防重放

→ 解析Content Type=0x17 (AppData)

→ 解析加密Payload → SM4-CBC/SM4-GCM解密

→ 解析AuthTag/HMAC → 完整性校验

→ 所有字段添加到协议树 → 用户界面显示结果

5.2 DTLCP解析结果展示

Wireshark界面显示DTLCP解析结果的完整结构:

...result

Packet Details:

Frame 1: 80 bytes on wire

├─ Ethernet II

├─ Internet Protocol Version 6

├─ User Datagram Protocol (Src Port: 9000, Dst Port: 9000)

└─ DTLCP Protocol (Epoch 0x0001)

├─ Epoch: 0x0001 (加密阶段)

├─ Sequence Number: 0x000000000001 (防重放序列号)

├─ Content Type: 0x17 (Application Data)

├─ Version: 0x0101 (DTLCP 1.1)

├─ Length: 64 bytes

└─ Encrypted Payload:

├─ IV (CBC): 16 bytes

│ 0x01cb7997f77ee792a871e70ece4c148e

├─ Encrypted Data: 48 bytes

│ [SM4-CBC加密的应用数据]

└─ MAC/AuthTag: 16 bytes

[HMAC-SM3完整性校验或SM4-GCM AuthTag]

DTLCP vs TLCP显示差异:

显示元素 TLCP (TCP) DTLCP (UDP)
传输层 Transmission Control Protocol User Datagram Protocol
连接状态 有连接状态 无连接,显示端口
序列号 TCP序列号(隐式) DTLCP Sequence Number(显式)
阶段标识 无显式标识 Epoch字段显示握手/加密阶段
分片信息 TCP自动处理 可能显示DTLCP分片标记

06

PART

关键技术要点(DTLCP特有)

KEY TECHNICAL POINTS

6.1 DTLCP数据读取技巧

固定头部字段:

...reading

Epoch: buffer(0, 2):uint() -- 16位会话周期标识

Sequence Number: buffer(2, 6):uint64() -- 读取6字节序列号,按uint64解析(高2字节为0)

Content Type: buffer(8, 1):uint() -- 消息类型标识

Version: buffer(9, 2):uint() -- 协议版本(0x0101)

Length: buffer(11, 2):uint() -- Payload长度

变长Payload解析:

...payload

根据Length字段读取Payload: buffer(13, length)

根据Content Type判断Payload结构:

├─ Handshake → 解析握手子消息

├─ AppData → 解析加密结构(IV+密文+MAC)

└─ Alert → 解析告警级别和描述

6.2 DTLCP协议树结构

DTLCP协议树采用层级结构,体现UDP和DTLCP特性:

...tree

顶层:DTLCP协议对象

├─ 第一层:DTLCP Record Header

│ ├─ Epoch(会话周期)

│ ├─ Sequence Number(防重放)

│ ├─ Content Type(消息类型)

│ ├─ Version(协议版本)

│ └─ Length(数据长度)

├─ 第二层:Payload内容

│ ├─ 加密数据结构

│ │ ├─ IV(初始化向量)

│ │ ├─ Encrypted Data(加密内容)

│ │ └─ MAC/AuthTag(完整性校验)

│ └─ 或握手消息结构

│ ├─ Handshake Type

│ ├─ Handshake Length

│ └─ Handshake Content

└─ 第三层:分片信息(如有)

├─ Fragment Offset

└─ Fragment Length

6.3 解析器触发条件(UDP特性)

DTLCP解析器在满足UDP端口条件时触发:

UDP端口匹配 :监听特定UDP端口(443、9000等)

协议识别 :通过DTLCP Record Header识别

动态配置 :通过Preference动态设置监听端口

UDP vs TCP触发差异:

特性 TCP (TLCP) UDP (DTLCP)
端口监听 单端口监听即可 可能监听多个UDP端口
连接识别 TCP流自动识别 UDP包无连接,需端口匹配
分片重组 TCP自动重组 UDP需应用层重组(DTLCP分片)
序列号 TCP隐式序列号 DTLCP显式Sequence Number

6.4 DTLCP防重放机制解析

...lua

-- 全局表存储每个epoch的序列号历史

local epoch\_seq\_history = {}

-- 在解析器函数中验证Sequence Number递增

local epoch = buffer(0, 2):uint()

local curr\_seq\_num = buffer(2, 6):uint64() -- 读取6字节序列号,按uint64解析

-- 初始化该epoch的序列号历史

if not epoch\_seq\_history[epoch] then

epoch\_seq\_history[epoch] = 0

end

-- 验证序列号递增

if curr\_seq\_num <= epoch\_seq\_history[epoch] then

-- 检测到重放攻击

subtree:add(fields.sequence\_number, buffer(2, 6))

:append\_text(\" ⚠️ 序列号异常(可能重放攻击)\")

else

-- 序列号正常

subtree:add(fields.sequence\_number, buffer(2, 6))

:append\_text(\" ✓ 序列号正常\")

epoch\_seq\_history[epoch] = curr\_seq\_num

end

07

PART

总结

SUMMARY

7.1 Wireshark加载Lua插件分析DTLCP数据的完整过程

第一阶段:启动与加载

1 Wireshark扫描插件目录,发现 dtlcp\_analyzer.lua

2 执行Lua脚本,创建DTLCP Proto对象

3 定义DTLCP字段(epoch、sequence\_number、content\_type等)

4 注册UDP端口解析器(监听443/9000等UDP端口)

第二阶段:UDP数据捕获

1 监听UDP端口,捕获UDP数据包

2 触发DTLCP解析器函数

3 读取DTLCP Record Header(13字节)

4 解析Epoch和Sequence Number

第三阶段:DTLCP协议解析

1 根据Epoch判断阶段(握手/加密)

2 根据Content Type解析Payload类型

3 处理加密结构或握手消息

4 处理UDP分片逻辑

第四阶段:结果显示

1 所有字段添加到协议树

2 Wireshark界面显示完整解析结果

3 用户查看DTLCP数据包详情

第五阶段:持续循环

1 持续捕获UDP数据包

2 持续解析DTLCP协议

3 持续更新显示结果

7.2 DTLCP与TLCP解析的关键差异

对比维度 TLCP (TCP) DTLCP (UDP) Lua插件实现差异
传输层监听 tcp.port udp.port 使用 DissectorTable.get(\"udp.port\")
协议头部 5字节 13字节(含epoch/seq) 解析更多头部字段
序列号 TCP隐式 DTLCP显式48位 需读取并验证sequence\_number
阶段标识 无显式 Epoch字段 根据epoch判断握手/加密阶段
分片处理 TCP自动 DTLCP手动 需处理DTLCP消息分片
防重放 TCP内置 DTLCP序列号 需验证序列号递增

7.3 DTLCP Lua插件的核心价值

通过Lua插件,Wireshark能够:

✅ 解析DTLCP特有的Epoch和Sequence Number字段

✅ 识别DTLCP基于UDP的传输特性

✅ 处理DTLCP消息分片和重组

✅ 验证DTLCP防重放机制(序列号检查)

✅ 解析DTLCP加密结构(SM4-CBC/SM4-GCM)

✅ 完整展示DTLCP协议数据(符合GM/T 0128-2023)

整个过程自动化执行,用户只需:

1 编写DTLCP Lua插件脚本(定义epoch/seq等字段)

2 放置到正确目录(%APPDATA%\Wireshark\plugins\)

3 启动Wireshark捕获UDP数据包

4 查看DTLCP解析结果

我是利刃信安,网络安全和密码安全、数据安全领域的小白。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见

点赞

在看

转发

如有疑问,请联系: Mannix6


第31篇全栈AIWeb流量分析、冰蝎解密、Java内存马排查与Fastjson漏洞利用全流程" 网络安全文章

第31篇全栈AIWeb流量分析、冰蝎解密、Java内存马排查与Fastjson漏洞利用全流程"

本文通过三道CTF题目详细演示了Web流量包分析提取冰蝎WebShell、本地导出Java类文件排查隐藏内存马、以及Fastjson漏洞关联哥斯拉流量解密获取Flag的完整实操步骤。核心方法包括过滤HTTP流量定位WebShell路径、使用MD5计算文件哈希、通过ABC蓝队分析工具解密冰蝎和哥斯拉加密流量、以及全局搜索敏感关键字排查内存马。可操作建议包括使用D盾查杀工具辅助验证和编写Python脚本解密Base64类文件。
【情报分析】特朗普2026年7月10日在TruthSocial的震惊发帖内容" 网络安全文章

【情报分析】特朗普2026年7月10日在TruthSocial的震惊发帖内容"

该文档分析特朗普2026年7月10日在TruthSocial的帖子,其声称1000枚导弹已瞄准伊朗,将个人暗杀威胁与国家核打击授权直接绑定。帖子包含自动报复机制、一年可延期时间窗口及嘲讽性宗教用语,旨在谈判前最大化威慑筹码并维持国内强硬形象。分析指出该帖与同日接受伊朗谈判请求形成信号矛盾,属于信息战工具,其真实军事命令存在不确定性。
一架飞机,三层危机!特朗普土耳其换机事件的深层逻辑" 网络安全文章

一架飞机,三层危机!特朗普土耳其换机事件的深层逻辑"

该文档分析了2026年7月8日特朗普在安卡拉北约峰会期间换机的深层逻辑。核心要点是换机决策并非单纯技术或公关失误,而是地缘政治、飞机安全争议与多重利益冲突的交汇点。新飞机(卡塔尔赠送的波音747-8)因改装仓促、能力存疑,在伊朗发布暗杀令及霍尔木兹海峡局势升级的背景下,被安全团队建议替换为防御系统更成熟的旧飞机。事件揭示了卡塔尔作为多重利益承压点的复杂角色,以及霍尔木兹海峡封锁对全球能源供应链的实质性威胁。
评论:0   参与:  0