1

我正在开发一个基于 Asterisk(最流行的开源 PBX 解决方案)的电话解决方案,我使用 AMI 协议将我的逻辑注入到它的拨号计划中,并使用 AGI 监听 Asterisk 的事件。

现在我需要在我的应用程序中管理参与转移(而不是盲转移),为此,我确实需要在某处以文本格式记录 AMI 和 AGI 的流量,以便我可以看到后面发生了什么场景。

我想到了 WireShark,因为它是目前最强大的流量捕获工具,但我无法让它发挥作用。我不知道要捕获哪个端口(AMI 在星号端的端口 5038 上工作,但我需要在我的 C# 应用程序服务器中使用 WireShark,而且我不知道这端哪个端口忙)。我无法创建过滤器来捕获仅与 Asterisk 相关的事件。

我也不知道如何使 WireShark 以文本格式记录流量,而不是显示那些根本不可读的二进制数据(可能是十六进制数据)。

我知道 AMI 协议非常简单,就像 HTTP 一样,它是一个基于文本的消息传递协议。因此,我想我应该能够看到它的文本日志。

有人对此有任何想法吗?

4

1 回答 1

3

您不能使用 AGI 监听星号事件。AGI 是 CONTROL 接口,没有事件发送给它。所有事件都通过 AMI 进行。

您可以在星号服务器(Linux 端)上使用 tcpdump 来查看 AMI 消息:

tcpdump -i eth0 -nqtttt -s 0 -A  '((src port 5038) or (dst port 5038))' 

除非是 FastAGI,否则您无法捕获 AGI 流量。对于获得 agi 信息,请执行以下操作:

asterisk -r
agi set debug on
于 2013-04-28T07:28:09.980 回答