版本说明 v1.2.0.0 (2026-01-25)

新增

  • 新增: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 识别更多上下文类型:DSPollInitLookupRecurseRemoteTombstone
    • 作用: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 使用,影响极小
    • 优势:支持准确的前瞻检测详细块和续行
  • 缺失或编码为空的查询名现在优雅处理(无解析错误);CSV 输出中缺失时 QuestionName 字段为空

改进

  • Convert-DNSDebugLogFile 解析更健壮:更严格的行验证和改进的提取减少了格式错误日志产生的虚假/无效行,同时保持 CSV/统计输出格式
  • PACKET 上下文检测区分简单查询和带详细块的查询
  • 无详细信息的 PACKET 条目后空行正确跳过
  • 详细块中的域名解码使用现有的 ConvertTo-Fqdn 函数以保持一致性

性能

  • 对无详细块日志保持处理速度
  • NoDetailsParsing 开关在不需要 JSON 解析时提供 30-50% 的速度提升
  • 多行记录处理期间高效的状态管理
  • 使用优化的字符串操作(TrimStart、Join)替代正则处理续行

备注

  • 这些更改设计为向后兼容正常使用场景。如依赖特定上下文名称集或之前严格的解析行为,请验证下游脚本
  • 新的 Details 列始终存在于 CSV 输出中;使用 NoDetailsParsing 可保持其为空以提升性能
  • 现有按列位置解析 CSV 的脚本需考虑新增的 Details 列(位置为第17列,位于 ComputerName 之前)