文章目录
前言
在呼叫中心类应用开发过程中,经常需要对 SIP 信令抓包,分析排查问题。通常抓包的工具非常多样,如 Wireshark、tcpdump、ngrep 等都是可选项,但是针对 SIP 信令的抓包,sngrep 则更为好用。因为 sngrep 不仅提供了图形界面,还会将一通会话的 SIP 信令关联汇总,非常直观
1. CentOS 环境安装 sngrep
1.1 下载依赖库
执行以下命令下载 sngrep
的相关依赖库
sudo yum install ncurses-devel make libpcap-devel pcre-devel openssl-devel git gcc autoconf automake
1.2 添加 sngrep 的源并导入
- 执行下面的命令新增一个源仓库配置文件
然后在该文件中写入以下配置内容sudo vim /etc/yum.repos.d/irontec.repo
[irontec] name=Irontec RPMs repository baseurl=http://packages.irontec.com/centos/$releasever/$basearch/
- 执行命令导入源仓库的公钥
sudo rpm --import http://packages.irontec.com/public.key
1.3 安装 sngrep
以上步骤处理完毕,执行以下命令即可下载安装 sngrep
sudo yum install sngrep
2. sngrep 使用
2.1 sngrep 可选参数列表
sngrep 常用的参数如下表所示,需注意 sngrep 只能抓取本机网卡上的出入流量
参数 | 功能 |
---|---|
-d | 指定需要抓包的网卡 |
-r | 捕获 RTP 媒体包 |
-I | 从 pacp 文件中解析 SIP 包 |
-O | 输出捕获的包到 pacp 文件中 |
-c | 仅显示以 INVITE 消息开始的 SIP 会话,可用于过滤掉心跳检测类消息 |
-l | 限制捕获对话的数量 |
2.2 sngrep 使用示例
-
执行命令
sudo sngrep -d eth0 -r
抓取指定网卡eth0
上的 SIP 包,进入到会话列表页面机器上可能会有多个网卡设备,一般网络抓包时如果不指定目标网卡,默认都是抓取所有网卡上的网络包。在 Linux 系统上,机器的网卡设备可以通过
ifconfig
命令查看 -
选定一个会话后按回车键查看一通 SIP 会话的完整交互,在该界面点击F3可以查看 RTP 交互