使用 Wireshark 检查 AMQP 0-9-1 和 AMQP 1.0 流量
概述
Wireshark 是一个图形化工具,可以捕获和检查流量,或者检查在不同主机上捕获的流量。
现代 Wireshark 版本包含对 AMQP 1.0 和 AMQP 0-9-1 流量检查和分析的支持。它可以解析(分析、可视化、过滤)AMQP 0-9-1 和 AMQP 1.0 流量,包括 AMQP 0-9-1 勘误 和 RabbitMQ 扩展。
Wireshark 基于与 tcpdump
相同的基础,一个名为 libpcap
的库,可以用于检查在服务器环境中捕获的 pcap
流量捕获文件。
tcpdump
和 Wireshark 一起提供了大量信息,解释了客户端(应用程序)和 RabbitMQ 节点发送和接收的内容。这些信息可以而且应该用于深入了解难以通过其他方式观察到的系统行为。这些工具补充了指标、日志、内部事件,所有这些都允许运维人员和开发人员更有效地排除分布式系统故障。
流量捕获对于分析消息流、不可路由的消息、发布者确认和应用程序对消费者确认的使用特别有用。
追踪 AMQP 1.0 和 AMQP 0-9-1
启动时,Wireshark 将显示一个界面列表,用于开始流量捕获。现代版本将明确突出显示主机上的主网络接口(从 Wi-Fi 网络接口推断)和环回(本地)接口。
要开始追踪 AMQP 1.0 或 AMQP 0-9-1 流量,请在相关的网络接口上启动捕获,然后在“应用显示过滤器”搜索框中过滤“amqp”。
“数据包列表”视图提供了客户端和 RabbitMQ 节点交换的协议帧和方法的摘要。
“信息”列指示类和方法(例如 Basic.Publish
),然后是最重要的参数。例如
Connection.Open vhost={name}
Connection.Close reply={reply-text}
Channel.Close reply={reply-text}
Exchange.Declare x={exchange-name}
Exchange.Bind dx={dest-exchange} sx={source-exchange} bk={routing-key}
Queue.Declare q={queue-name}
Queue.Bind q={queue-name} x={exchange-name} bk={routing-key}
Queue.Delete q={queue-name}
Basic.Publish x={exchange-name} rk={routing-key}
“数据包详细信息”然后指示帧的所有属性。它还包括用方括号括起来的动态计算值。
以下是 Wireshark 窗口的示例,其中包含活动捕获并启用了“amqp”显示过滤器。

相关帧之间的链接
Wireshark 分析 AMQP 0-9-1 数据包流并显示方括号中包含的其他信息
- basic.publish 的参数包括发布序列号,这是 发布者确认使用的序列号
- 每个确认的 basic.publish 或
basic.deliver
都包含对包含相应basic.ack
或basic.nack
帧(如果存在)的帧的引用。 - 同样,每个 basic.ack 都包含对被此 Ack 确认的帧(可能是多个)的引用
更多指标
Wireshark 自动突出显示带有以下内容的 AMQP 0-9-1 数据包
您可以显示专用对话框中重要帧的摘要。转到“分析” > “专家信息”,并可能应用显示过滤器

检查 TLS 启用连接上的流量
Wireshark 使您可以检查 AMQPS 流量,但是您只能解密使用 RSA 密钥加密的流量,不包括 RSA 临时密钥和 Diffie-Hellman 临时密钥 (DHE/EDH) 密码套件。您应该设置密码套件 RabbitMQ 使用的密码套件,并将列表限制为仅 RSA。
此外,必须向 Wireshark 提供用于加密数据的私钥。如果使用相互对等验证,则必须将客户端和服务器私钥都添加到 Wireshark。
为此,请转到菜单中的“编辑 > 首选项
”对话框,选择“协议 > SSL
”,然后使用“编辑 RSA 密钥
”将私钥文件路径添加到列表中。
该界面将包含一些要填写的值
- IP 地址和端口标识拥有私钥的主机,通常是服务器。可以使用通配符 IP 地址 0.0.0.0 和通配符端口 0 或数据
- 协议应设置为
amqp
- 私钥文件应为 PEM 或 PKCS12 格式,可以选择受密码保护