使用 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 或 data。
- 协议应设置为
amqp。 - 私钥文件应为 PEM 或 PKCS12 格式,可以选择用密码保护。