SIP信令及抓包工具介绍
培训的目的
- 让大家了解sip协议,了解话务系统内部是如何进行通信的;
- 了解信令抓包工具sngrep的基本使用;
- 知道如何通过tcpdump进行抓包;
1、sip信令分析
以石家庄为例:192.168.2.241(语音网关),192.168.2.105(CTI),在CTI上开始抓包:
# -r 参数就抓媒体流
# sngrep -r
案例为呼入场景,发起方为户手机号,被叫方为热线号码。
1.1、内容分析
本次通话的场景是市民呼入到石家庄12345热线,主叫号码:15713080482,被叫:12345热线,呼入一般是发起方(这里是用户手机号)发起的呼叫,语音网关(2.241)–>CTI(2.105),经过以下几个交互:
- 呼叫方发起invite请求;
- 接收方回复100trying;
- 接收方回复180Ringing(根据情况而定);
- 接收方回复200ok;
- 呼叫方回复ack;
- 双方开始建立媒体连接;
- 挂机的一方发送bye消息;
- 另一方接收到bye消息后回复ack;
1.2、消息头
- Via(经由):指示消息传输的路径。它包括了发送者的主机名和端口,还有一个分支参数,用于唯一标识事务。
- From(来自):包含发送者的SIP地址,可能包括用户标识符和域名。
- To(到):包含接收者的SIP地址,也可能包括用户标识符和域名。
- Call-ID(呼叫标识):一个唯一的呼叫标识符,允许将所有相关的消息与同一个呼叫相关联。
- CSeq(命令序列):指示消息的执行顺序,它包括一个序列号和一个方法(比如INVITE、ACK、等等)。
1.3、消息体
m=audio 10408 RTP/AVP 18 8 0 101
- 这是SDP的"媒体描述"(media description)行。它指示会话将包含音频流,将使用端口10408进行传输,使用RTP协议,同时支持的媒体格式有18、8、0和101。
a=rtpmap:18 G729/8000
- 这是一个媒体属性行,指示编号为18的媒体格式是G.729编解码器,采样率为8000Hz。
a=rtpmap:8 PCMA/8000
- 这是另一个媒体属性行,指示编号为8的媒体格式是PCMA(A-law PCM),采样率为8000Hz。
a=rtpmap:0 PCMU/8000
- 这是另一个媒体属性行,指示编号为0的媒体格式是PCMU(μ-law PCM),采样率为8000Hz。
a=rtpmap:101 telephone-event/8000
- 这是一个媒体属性行,指示编号为101的媒体格式是用于传输电话事件(如拨号音或按键音)的格式,采样率为8000Hz。
a=fmtp:18 annexb=no
- 这是一个媒体属性行,提供了特定于媒体格式18(G.729)的附加参数,其中"annexb=no"可能是指示不使用Annex B(一种传输模式)。
a=ptime:20
- 这是一个媒体属性行,指示音频的包时长为20毫秒,也就是每个RTP包中包含的音频数据的时长。
2、sngrep的使用
2.1、定义
sngrep是一个用于监听、分析SIP(Session Initiation Protocol)通信的命令行工具。它可以捕获网络流量中的SIP消息,并以易于阅读的格式显示这些消息的详细信息。Sngrep 对SIP抓包的专业性体现在实时抓取,实时展示。可以作为sip PCAP查看器。对sip信令中的任意字段设置过滤器。对一个dialog的sip信令自动关联。
2.2、抓包命令
[root@localhost opt]# sngrep
# 或
[root@localhost opt]# sngrep -r
2.3、常见参数
sngrep 参数
-h --help:显示帮助信息
-V --version:显示版本信息
-d --device:指定抓包的网卡
-I --input:从pacp文件中解析sip包
-O --output:输出捕获的包到pacp文件中
-c --calls:仅显示邀请消息
-r --rtp:捕获RTP数据包有效载荷捕获rtp包
-l --limit:限制捕获对话的数量
-i --icase:使大小写不敏感
-v --invert:颠倒(不太明白)
-N --no-interface:不显示sngrep界面,仅捕获
-q --quiet:不要在无界面模式下打印捕获的对话框
-D --dump-config:打印活动的配置设置并退出
-f --config:从文件中读取配置
-R --rotate:达到捕获限制时轮换呼叫。
-H --eep-send:荷马sipcapture网址(udp:XXXX:XXXX)
-L --eep-listen:监听封装的数据包(udp:XXXX:XXXX)
-k --keyfile:RSA私钥文件解密捕获的数据包
抓取INVITE请求的包:
sngrep ^INVITE
抓取REGISTER请求的包:
sngrep ^REGISTER
抓取OPTIONS请求的包:
sngrep ^OPTIONS
捕获端口5060上的所有SIP数据包:
sngrep port 5060
2.4、关键词搜索
在抓包页面按下TAB键,即可通过关键词进行过滤,可以是手机号,可以是IP地址,如下图所示:
2.5、暂停恢复抓包
在抓包页面直接按P键进行暂停抓包,再次按P键进行恢复抓包。
2.6、呼叫页面即功能使用
选择一通通话,按照回车后者F4进行查看详细交互信息,数字0和9可以控制消息边界显示宽窄,如下图:
2.6.1、查看媒体交互消息
在抓包详细页面可以通过F2查看SDP消息,通过F3可以查看媒体交消息,详情如下:
主叫发起INV消息,其中在INV中包含自己需要交互的端口信息,此处提供自己的交互端口为13658,被叫在200ok中携带了被叫自己的协商端口,这里是12134端口。
2.6.2、保存抓包文件
在抓包页面按下F2进行保存抓包,上下肩头为换行,空格为选中,如下图:
2.6.3、打开抓包命令
sngrep -I XXX.pcap
例:
打开以前的抓包:
[root@localhost ~]# ll /opt
总用量 76
-rw-r--r-- 1 root root 63244 9月 19 09:37 15713080482.pcap
drwxr-xr-x. 2 root root 4096 3月 26 2015 rh
drwxr-xr-x 2 root root 4096 1月 18 2023 snmp
drwxr-xr-x 2 root root 4096 9月 25 2022 snmp20221121
[root@localhost ~]# cd /opt/
[root@localhost opt]# sngrep -I 15713080482.pcap
2.6.4、其他快捷指令
- ESC 为退出快捷键。
- F5 为清屏快捷键。
3、tcpdump使用
解释: Tcpdump 可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump 抓包(服务器端抓包),有灵活的命令参数,可以抓取任何端口任何协议任何网卡的数据包,可以通过wireshark分析抓包。
3.1、tcpdump使用帮助
[root@VM-4-14-centos ~]# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips 26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
3.2、常见参数
# tcpdump常见参数
-i 指定网卡名,any是任意网卡
-C 指抓包文件的大小,单位:M,大写
-W 指定分包数量(循环抓包)
-w 把数据包数据写入指定的文件
# 例:单个包设置300M的大小,数量设置成10个,保存路径为/tmp下
[root@VM-4-14-centos ~]# tcpdump -i any -C 300 -W 10 -w /tmp/test.pcap
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
主意: 不管是sngrep还是tcpdump都不能抓太长时间,因为抓包工具会比较占资源,抓包时间过长会导致系统资源占用过高,从而导致影响业务。