Wireshark LLDP协议分析:网络拓扑发现
LLDP(Link Layer Discovery Protocol,链路层发现协议)是一种二层网络协议,用于网络设备间交换设备身份、能力和邻居关系等信息,帮助构建网络拓扑。Wireshark通过epan/dissectors/packet-lldp.c实现LLDP协议解析,支持标准TLV(Type-Length-Value)及厂商自定义扩展。
LLDP协议基础
LLDP报文格式遵循IEEE 802.1AB标准,由LLDPDU(LLDP Data Unit)组成,每个LLDPDU包含多个TLV。Wireshark解析逻辑在packet-lldp.c中定义了核心TLV类型,包括:
- 基础TLV:必选的
Chassis ID(0x01)、Port ID(0x02)、Time to Live(0x03),以及可选的Port Description(0x04)、System Name(0x05)等。 - 扩展TLV:
Organization Specific(0x7F)类型,用于厂商自定义数据,如Cisco的PoE信息、Avaya的IP电话配置等。
TLV结构解析
每个TLV包含3字节头部(10位类型+16位长度)和数据字段。例如,packet-lldp.c定义了类型与长度的掩码计算:
#define TLV_TYPE_MASK 0xFE00
#define TLV_TYPE(value) (((value) & TLV_TYPE_MASK) >> 9)
#define TLV_INFO_LEN_MASK 0x01FF
#define TLV_INFO_LEN(value) ((value) & TLV_INFO_LEN_MASK)
Wireshark LLDP解析实现
核心数据结构
packet-lldp.c定义了profinet_lldp_column_info结构体,存储设备MAC地址、端口标识等拓扑关键信息,用于Wireshark界面列显示。
协议注册流程
- 协议初始化:
proto_register_lldp()函数注册协议名称、字段和子树结构,如packet-lldp.c所示。 - 解析器注册:
proto_reg_handoff_lldp()将LLDP解析器绑定到以太网类型0x88CC,确保LLDP报文被正确捕获。
关键字段解析
- Chassis ID:设备唯一标识,支持MAC地址(子类型4)、网络地址(子类型5)等格式,解析逻辑见packet-lldp.c。
- System Capabilities:设备功能类型(如交换机、路由器),通过hf_lldp_tlv_system_cap字段解析,包含
bridge(0x02)、router(0x08)等标志位。
网络拓扑发现实践
捕获LLDP报文
- 启动Wireshark,选择目标网络接口。
- 设置过滤规则
lldp,捕获设备周期性发送的LLDP报文(默认每30秒)。
解析拓扑关系
Wireshark通过LLDP报文中的Chassis ID和Port ID关联设备邻居。例如,某交换机发送的LLDP报文包含:
Chassis ID:MAC地址00:1b:44:11:3a:b2Port ID:接口名称Gi1/0/1System Name:Switch-A
通过聚合多设备LLDP数据,可生成如下拓扑片段:
厂商扩展解析
Wireshark支持解析厂商自定义TLV,如:
- Cisco PoE信息:通过OUI 0x000af2识别,解析供电状态和功率,见hf_cisco_upoe。
- Avaya IP电话:子类型11包含IP配置信息,如hf_avaya_ipphone_ip解析电话IP地址。
高级应用与工具集成
批量分析与拓扑生成
结合tshark(Wireshark命令行工具)批量提取LLDP数据:
tshark -r capture.pcap -T fields -e lldp.chassis_id -e lldp.port_id -e lldp.system_name > lldp_topology.csv
结果可导入Excel或Python脚本生成拓扑图。
协议调试与问题排查
- 异常报文检测:Wireshark专家信息(ei_lldp_bad_length)标记长度错误、未知TLV等异常。
- 厂商兼容性验证:通过organization specific TLV解析,验证第三方设备LLDP扩展是否符合规范。
总结
LLDP协议是网络拓扑可视化的基础,Wireshark通过epan/dissectors/packet-lldp.c提供了完整的解析能力,支持从报文捕获到拓扑关系提取的全流程分析。结合Wireshark的过滤、统计功能,可快速定位网络设备连接问题,优化网络架构。官方文档doc/README.display_filter提供了更多LLDP过滤规则示例。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



