分享

Freeswitch之基本技能

 草莓加冰 2017-06-04

1、调试与排错

1.1 解决问题的一般方法和流程

解决问题一般要经过以下几个步骤:发现问题、定位问题、分析问题、解决问题。下面以一个例子来简单的说明,目的就是教会大家如何发现并准确地定位问题。

假设我们遇到这样的一个问题:Alice向我们报告说,她通过Freeswitch呼叫Bob,能呼通,但没有声音。

在这里,有两个问题是很值得考虑的:

1.核实问题的现象:有时候问题的实际现象Alice可能描述不清楚,或者可能跟她描述的完全不一样。

2.问题能否重现:如果一个问题总是能重现,那么一般是比较容易解决的。最难解决的问题就是不能重现的问题,或者不知道什么时候能重现的问题。

在发现问题后,就要尝试定位问题。一般建议使用“分段法”和“换位思考法”来定位问题。所谓分段法,就是一个问题可能涉及很多环节,我们首先要把这些环节从逻辑上和功能上分开,一段一段地检查。所谓换位思考法,结合例子,如果Alice打给Bob没有声音,那么,Bob打给Alice有没有声音?能不能把AliceBob的话机对调一下再试一次?或者AliceBob换其他的话机试试。

当上面这些方法找不到具体原因时,就考虑用分段法。如首先让Alice拨打默认的9196,看能否听到自己的声音。9196是默认的回音测试功能,如果打9196都听不到声音,就要先解决Alice9196的问题。

首先建议关掉防火墙,确认防火墙关闭后,可以通过抓包看有没有RTP流到达或从服务器发出。Wireshark抓包知识后面讲。

2、查看日志

在有些情况下,呼叫可能直接不通,即无法正常建立呼叫。这时候就需要我们查看系统的日志。

在日志中,“警告(WARNING)”和“错误(ERROR)”是级别比较高的日志,“调试(DEBUG)”是级别比较低的日志,但其能显示更多的细节。

如果Alice发起呼叫后什么日志也不显示,那么肯定呼叫没有到达Freeswitch,此时应检查客户端是否配错了IP地址或防火墙是否有问题。入如果呼叫到达了,还是出错,查看是不是Dialplan设置的问题。另外,日志中一般有挂机的原因,比方说CALL_REJECTED代表呼叫被拒绝,可能是用户名或密码不对;USER_NOT_REGISTERED就说明Bob没有注册,因而呼叫无法继续进行。

3、使用外部工具抓包

1.tcpdump是经典的抓包工具,比如下面的命令可以抓取5060端口上的SIP包:

# tcpdump -nq -s 0 -A -vvv -i eth0 port 5060

其中,-n-q表示不进行域名翻译及减少输出内容;-s 0表示不限制包长,即争取抓最大的长度;-A表示以ASCII方式输出,这样用眼看起来比较直观;-v表示显示的详细程度,'v’越多则越详细;-i表示使用指定的网卡;port 5060表示过滤器,这里我们只关心5060端口上的SIP包。

另外,可以使用-w将结果写入文件中,如下列命令将结果写入/tmp/dump.pcap文件中:

# tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap port 5060

当还需要分析RTP流时,可以将port 5060简单改成udp,这样可以抓取所有的UDP包:

# tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap udp

如果你是在服务器上抓包,并只想抓取某个用户的包,可以根据用户的IP地址来进行过滤。当然这需要找到用户实际的IP地址,如用户的IP192.168.200.10,端口号是65272

# tcpdump -s 0 -i eth0 -A host 192.168.200.10 and port 65272

有时候我们需要抓取所有的RTP包进行分析,在Freeswitch中默认的端口号范围是16384~32768,因此我们可以使用如下抓包命令:

# tcpdump -i eth0 -w /tmp/sip-rtp.pcap udp and (port 5060 or port 5080 or portrange16384~32768)

4、使用Wireshark抓包并分析呼叫

Wireshark可以分析使用tcpdumppcapsipdump抓下来的pcap包。

1、分析SIP

首先我们先看SIP信令,我们可以在“Filter”一栏中输入“sip”,便可以显示所有的SIP包,如图一。

 

图一 使用了sip过滤器只显示SIP

Wireshark有专门分析VoIPT通话的工具。在主菜单中,选择TelephonyVoIP Calls可以看到所有的VoIP呼叫,如图二。

 
 图二 一路VoIP通话

此时,选择一路通话并单击Flow按钮,就可以看到详细的SIP呼叫流程,如图三。

 
 图三 Wireshark中分析呼叫流程

2、分析RTP

Filter栏中输入RTP就可以看到所有的RTP包,详细的分析可以使用TelephonyShow All Streams显示所有的RTP流。如图四所示。

 
 图四 一个呼叫的2RTP

单击分析就可以看到详细的RTP流分析。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多