sngrep
是一款轻量级的 SIP 抓包工具,专门用于 实时分析 SIP 呼叫流,可以在终端中 可视化 SIP INVITE、REGISTER、BYE 等消息,并支持保存和过滤流量。
本教程适用于 CentOS(FreePBX)、Debian、Ubuntu 等 Linux 服务器。
1. 安装 sngrep
1.1 CentOS / RHEL(适用于 FreePBX)
- 启用 EPEL 源并安装 sngrep:
yum install epel-release -y yum install sngrep -y
1.2 Debian / Ubuntu
- 直接使用 apt 安装:
apt update && apt install sngrep -y
1.3 从源码安装(适用于所有 Linux)
如果你想安装最新版本,可以从 GitHub 编译:
git clone https://github.com/irontec/sngrep.git
cd sngrep
./bootstrap.sh
./configure
make && make install
安装完成后,运行 sngrep
以确认是否成功安装:
sngrep -v
如果返回版本号,说明安装成功。
2. 使用 sngrep 进行 SIP 抓包
2.1 运行 sngrep
默认情况下,运行以下命令即可 实时查看 SIP 流量:
sngrep
界面说明:
- 显示所有 SIP 会话(REGISTER、INVITE、BYE 等)。
- 你可以选择某个 SIP 通话,按 Enter 进入详细分析。
2.2 过滤特定 SIP 端口
SIP 默认使用 UDP 5060 端口,你可以指定端口抓包:
sngrep -f "port 5060"
如果你使用 PJSIP,可能会使用 TCP/TLS 端口 5061:
sngrep -f "port 5061"
2.3 只抓取 INVITE(呼叫请求)
sngrep -t INVITE
或者:
sngrep -f "udp port 5060 and sip.Method == INVITE"
这样可以只显示 呼叫 而不显示 REGISTER、OPTIONS 等 SIP 消息。
2.4 只抓取特定 IP 地址的 SIP 流量
如果你想查看某个 FreePBX 服务器或外部 VoIP 设备的 SIP 流量:
sngrep -IP 192.168.1.100
或者:
sngrep -f "host 192.168.1.100"
这样可以过滤 特定 IP 的 SIP 注册和通话。
2.5 保存抓包数据
你可以将 SIP 流量保存为 .pcap 文件,稍后用 Wireshark 分析:
sngrep -O /tmp/sip_capture.pcap
然后你可以用 Wireshark
打开 /tmp/sip_capture.pcap
进行详细分析。
2.6 仅抓取 RTP 语音流
如果你想要抓取 RTP(语音流),可以使用:
sngrep -R
但是 sngrep
主要用于 SIP 协议分析,如果你需要详细 RTP 数据,建议使用 tcpdump
:
tcpdump -i eth0 udp -w /tmp/rtp_capture.pcap
3. 进阶功能
3.1 以后台模式运行(记录 SIP 流量)
你可以让 sngrep
在后台运行,并保存 SIP 会话:
sngrep -O /var/log/sngrep.pcap -d
当你需要分析数据时,可以使用:
sngrep -I /var/log/sngrep.pcap
这样你可以在稍后分析存储的 SIP 抓包数据。
3.2 结合 grep 过滤特定号码
如果你想查找特定号码的 SIP 呼叫(例如 1001
):
sngrep | grep 1001
或者:
sngrep -f "sip contains 1001"
这样你就能快速找到 该号码的所有 SIP 呼叫。
3.3 结合 Wireshark 分析
如果你需要详细 RTP 分析,可以先用 sngrep
抓取数据:
sngrep -O /tmp/sip_capture.pcap
然后将数据下载到本地:
scp root@your_freepbx_ip:/tmp/sip_capture.pcap .
最后用 Wireshark 打开并使用 sip
或 rtp
过滤数据。
4. 总结
命令 | 作用 |
---|---|
sngrep |
监听所有 SIP 流量 |
sngrep -f "port 5060" |
只抓取 SIP 5060 端口数据 |
sngrep -t INVITE |
只显示 INVITE 呼叫 |
sngrep -IP 192.168.1.100 |
只监听指定 IP |
sngrep -O /tmp/sip_capture.pcap |
保存抓包数据 |
sngrep -R |
抓取 RTP 语音流 |
sngrep -d |
后台运行并记录数据 |