PLDM协议逆向解析:用Wireshark抓包分析PDR数据帧的28种Type

张开发
2026/4/15 16:00:04 15 分钟阅读

分享文章

PLDM协议逆向解析:用Wireshark抓包分析PDR数据帧的28种Type
PLDM协议深度解析28种PDR类型实战抓包与逆向分析指南在数据中心和嵌入式系统管理领域PLDMPlatform Level Data Model协议已成为硬件管理的事实标准。作为PLDM协议的核心组件PDRPlatform Description Record定义了平台硬件资源的描述、配置和监控方式。本文将基于Wireshark抓包实战深入解析28种PDR数据帧的结构特点与逆向分析方法。1. PLDM协议与PDR基础架构PLDM协议栈构建在MCTPManagement Component Transport Protocol之上采用请求-响应模型实现带外管理。PDR作为PLDM的元数据引擎其核心价值在于硬件抽象将传感器、执行器等物理设备抽象为标准化数据结构动态发现支持管理控制器BMC在运行时获取平台配置跨厂商兼容通过标准类型定义1-24和OEM扩展类型126-127实现灵活扩展典型的PDR交互流程包含三个阶段终结点发现通过MCTP Endpoint Discovery定位PLDM设备PDR仓库同步使用GetPDR命令获取平台描述记录实时监控基于PDR定义的阈值触发事件通知# 典型PLDM over MCTP通信示例 tcpdump -i eth0 -nn -s0 -w pldm.pcap port 623提示在数据中心环境中PLDM通信通常发生在BMC与各个硬件组件之间使用IANA分配的623端口IPMI标准端口2. PDR通用头部结构与类型体系所有PDR类型共享相同的8字节头部结构这是逆向分析的起点字段名类型大小(字节)描述示例值recordHandleuint324唯一标识PDR的句柄0x00010001PDRHeaderVersionuint81头部版本号0x01PDRTypeuint81PDR类型代码0x02(Numeric Sensor)recordChangeNumberuint162变更计数器0x0001dataLengthuint162数据部分长度0x004028种标准PDR类型可分为五大类终结点管理类Type 1: Terminus Locator PDRType 126: OEM Device PDR传感器监控类Type 2: Numeric Sensor PDRType 4: State Sensor PDRType 21: Compact Numeric Sensor PDR执行器控制类Type 9: Numeric Effecter PDRType 11: State Effecter PDR实体关联类Type 15: Entity Association PDRType 23: Redfish Entity Association PDROEM扩展类Type 126: OEM Device PDRType 127: OEM PDR3. 关键PDR类型逆向实战3.1 Terminus Locator PDRType 1分析作为终结点拓扑的锚点Type 1 PDR包含以下关键字段# Terminus Locator PDR结构示例 struct terminus_locator_pdr: common_header # 标准8字节头部 PLDMTerminusHandle # 2字节终结点句柄 validity # 1字节有效性标志 TID # 1字节终结点ID containerID # 2字节容器ID terminusLocatorType # 1字节定位类型 terminusLocatorValue # 变长定位数据定位类型决定terminusLocatorValue的解析方式类型值类型名称典型应用场景0x01UID基于UUID的设备标识0x02MCTP_EIDMCTP终结点ID寻址0x03SMBusRelativeSMBus从设备地址0x04systemSoftware系统软件代理Wireshark过滤技巧pldm.type 0x01 pldm.pdr_header.pdr_type 13.2 Numeric Sensor PDRType 2解析数值型传感器PDR是硬件监控的核心其字段结构呈现多层嵌套// Numeric Sensor PDR关键字段 typedef struct { uint16_t sensorID; uint16_t entityType; // 关联实体类型 uint16_t entityInstance; uint16_t containerID; uint8_t baseUnit; // 基础单位代码 int8_t unitModifier; // 单位缩放因子(10^N) float resolution; // 单位转换系数 float offset; // 单位转换偏移 uint16_t accuracy; // 精度(0.01%单位) } NumericSensorPDR;单位转换公式物理值 (原始值 × resolution) offset阈值字段位图分析位位置阈值类型对应字段0Upper WarningwarningHigh1Upper CriticalcriticalHigh2Upper FatalfatalHigh3Lower WarningwarningLow4Lower CriticalcriticalLow5Lower FatalfatalLow3.3 Entity Association PDRType 15拓扑构建实体关联PDR描述硬件组件的层次结构其核心是容器-包含模型# 实体关联关系示例 entity_association { containerID: 0x1000, containerEntity: { type: 0x2001, # 机箱 instance: 1, container: 0 # 顶层容器 }, containedEntities: [ {type: 0x3001, instance: 1}, # 电源模块1 {type: 0x3001, instance: 2} # 电源模块2 ] }常见实体类型代码类型值实体名称规范章节0x2001机箱DSP0249 9.1.20x3001电源模块DSP0249 9.1.30x4001处理器DSP0249 9.1.44. Wireshark高级分析技巧4.1 解码PLDM over MCTP报文在Wireshark中正确解析PLDM需要以下步骤确保启用MCTP协议解析设置PLDM作为MCTP的有效载荷类型应用显示过滤器mctp.payload_type 1关键字段定位技巧PLDM头部pldm.headerPDR类型pldm.pdr_header.pdr_type终结点IDpldm.terminus_id4.2 常见PDR问题排查记录句柄冲突症状GetPDR响应返回PLDM_ERROR_INVALID_RECORD_HANDLE分析检查recordHandle字段是否在PDR仓库内唯一单位转换异常症状传感器读数与物理值偏差大验证检查resolution和offset字段的字节序阈值触发失效诊断确认supportedThresholds位图与实际阈值字段匹配5. OEM扩展与自定义PDR开发厂商自定义PDR开发需遵循以下规范类型分配标准类型范围1-24OEM类型范围126-127字段设计原则前8字节保持标准头部OEM数据区以vendorIANA开头总长度不超过64KB# OEM PDR设计示例 class OEM_PDR: def __init__(self): self.common_header { recordHandle: 0x80000001, PDRType: 126 } self.vendor_specific { vendorIANA: 0x000012D, # 华为IANA OEMRecordID: 0x01, data: b\x01\x02\x03 # 自定义数据 }兼容性建议为关键字段保留向后兼容空间在PDR描述中包含版本标识避免与标准类型语义冲突通过深度解析PDR数据帧结构工程师可以更高效地开发PLDM管理功能快速诊断硬件通信问题。在实际项目中建议结合厂商文档和协议分析工具逐步构建完整的平台管理解决方案。

更多文章