# 版本说明 v1.2.0.0 (2026-01-25)

LLMS index: [llms.txt](/v1.2.1.0/llms.txt)

---

## 新增

* **新增**：DNS PACKET 详细块的多行记录处理
  * PACKET 上下文条目现在可以包含详细的 TCP/UDP 连接信息和 DNS 消息结构
  * 详细块被解析为结构化的 JSON 格式，存储在新的 `Details` 列中
  * 包含：套接字信息、远程地址/端口、时序数据、消息结构（XID、Flags、QCOUNT 等）
  * DNS 部分（QUESTION、ANSWER、AUTHORITY、ADDITIONAL）捕获完整记录详情
  * 详细块中的编码域名自动转换为 FQDN 格式
* **新增**：CSV 输出中的 `Details` 列
  * 包含带有详细块的 PACKET 条目的结构化 JSON 数据
  * 对于无详细信息的 PACKET 条目及所有非 PACKET 上下文，该列为空
  * 支持对 DNS 查询/响应进行深度数据包分析和取证调查
* **新增**：性能优化的 `NoDetailsParsing` 开关参数
  * 跳过对 PACKET 详细块的昂贵 JSON 解析
  * ***可提升***处理速度 **30-50%**，适用于包含大量详细块的日志
  * 适合处理超大文件（100MB+）且不需要详细包结构时使用
  * 详细块仍收集于 Information 列，但 Details 列保持为空
* **新增**：非 PACKET 上下文的多行续行支持
  * EVENT、Note、DSPoll 等上下文现在可跨多行
  * 缩进的续行自动合并至主记录的 Information 字段
  * 保留完整的错误信息、区域更新和诊断输出
* **新增**：`ContextFilter` 识别更多上下文类型：`DSPoll`、`Init`、`Lookup`、`Recurse`、`Remote`、`Tombstone`
  * 作用：`Convert-DNSDebugLogFile` 现在可通过 `-ContextFilter` 包含/排除这些诊断和生命周期条目
* **新增**：统计输出新增两个专用文件
  * `_Statistic.csv`：按日期和上下文类型的每日记录计数（Date、Context、Count、ComputerName）
  * `_PacketStatistic.csv`：按日期、客户端/协议/方向/类型的每日 PACKET 计数（Date、ClientIP、Protocol、Direction、QuestionType、Count、ComputerName）
  * 优势：更聚焦的报告（操作上下文量与 DNS 流量细分）
* PACKET 详细块的 JSON 生成经过性能优化（手动解析替代正则）

## 变更

* **重大变更**：CSV 输出现在包含 18 列（在 `ComputerName` 前新增 `Details` 列）
  * 新列顺序：DateTime、ThreadId、Context、PacketId、Protocol、Direction、ClientIP、Xid、Type、Opcode、FlagsHex、FlagsChar、ResponseCode、QuestionType、QuestionName、Information、**Details**、ComputerName
  * 影响：依赖列位置的脚本需更新
  * 优势：丰富的数据包分析能力，同时不改变现有 Information 列行为
* 数据行处理重构为将所有行读入内存，以便高效检测多行记录
  * 性能：由于优化的 List<string> 使用，影响极小
  * 优势：支持准确的前瞻检测详细块和续行
* 缺失或编码为空的查询名现在优雅处理（无解析错误）；CSV 输出中缺失时 QuestionName 字段为空

## 改进

* `Convert-DNSDebugLogFile` 解析更健壮：更严格的行验证和改进的提取减少了格式错误日志产生的虚假/无效行，同时保持 CSV/统计输出格式
* PACKET 上下文检测区分简单查询和带详细块的查询
* 无详细信息的 PACKET 条目后空行正确跳过
* 详细块中的域名解码使用现有的 `ConvertTo-Fqdn` 函数以保持一致性

## 性能

* 对无详细块日志保持处理速度
* `NoDetailsParsing` 开关在不需要 JSON 解析时提供 30-50% 的速度提升
* 多行记录处理期间高效的状态管理
* 使用优化的字符串操作（TrimStart、Join）替代正则处理续行

## 备注

* 这些更改设计为向后兼容正常使用场景。如依赖特定上下文名称集或之前严格的解析行为，请验证下游脚本
* 新的 `Details` 列始终存在于 CSV 输出中；使用 `NoDetailsParsing` 可保持其为空以提升性能
* 现有按列位置解析 CSV 的脚本需考虑新增的 `Details` 列（位置为第17列，位于 ComputerName 之前）
