一个sip的抓包小工具,在GitHub上竟然能够积累1K的star,看来还是有点东西,当然官方的友链也是发挥了重要作用
首先送上项目地址,有能力的宝子可以自行查看
经典的网络抓包工具有很多,比如:
- Wireshark: 大而全
- tcpdump: 较底层
- Fiddler:主要用于HTTP/HTTPS协议
- ……
但是对于本章要讲的SIP信令的抓包,也就是Wireshark、tcpdump,以及前面讲到过较为系统的Homer,如果嫌弃Wireshark笨重、tcpdump原始,那么就一起来看看这款短小精悍的sngrep。
官方自己定义:是一款可以在命令行终端展示SIP电话消息流的工具,它能够支持实时的抓取并展现SIP包,也可以用来做一个pcap的阅读器。
面向命令行终端,具有可视化能力,实时抓取并展示,简直是生产调试与运维的利器。
- 如何安装?
- 如何使用? 
  - 如何抓取
- 如何查看pcap文件
 
如何安装?
前提条件,需要服务器上具备这些模块:
- libncurses5 - for UI, windows, panels.
- libpcap - for capturing packets.
- libssl - (optional) for TLS transport decrypt using OpenSSL and libcrypt
- gnutls - (optional) for TLS transport decrypt using GnuTLS and libgcrypt
- libncursesw5 - (optional) for UI, windows, panels (wide-character support)
- libpcre - (optional) for Perl Compatible regular expressions
- zlib - (optional) for gzip compressed pcap files
可以使用autotools构建,或者cmake,基本是类似的,我这边就用的常规centos系统
autotools:
./bootstrap.sh
./configure
make
make install (as root)
cmake:
mkdir build && cd build
cmake [<options>] ..
make
make install (as root)
一切顺利,构建成功
如何使用?
sngrep 由于是网络抓包,因此至少需要sudo权限。
对于参数可以通过help来看一下
# sngrep --help
Usage: sngrep [-hVcivNqrD] [-IO pcap_dump] [-d dev] [-l limit] [-B buffer] [<match expression>] [<bpf filter>]
    -h --help		 This usage
    -V --version	 Version information
    -d --device		 Use this capture device instead of default
    -I --input		 Read captured data from pcap file
    -O --output		 Write captured data to pcap file
    -B --buffer		 Set pcap buffer size in MB (default: 2)
    -c --calls		 Only display dialogs starting with INVITE
    -r --rtp		 Capture RTP packets payload
    -l --limit		 Set capture limit to N dialogs
    -i --icase		 Make <match expression> case insensitive
    -v --invert		 Invert <match expression>
    -N --no-interface	 Don't display sngrep interface, just capture
    -q --quiet		 Don't print captured dialogs in no interface mode
    -D --dump-config	 Print active configuration settings and exit
    -f --config		 Read configuration from file
    -F --no-config	 Do not read configuration from default config file
    -T --text	 Save pcap to text file
    -R --rotate		 Rotate calls when capture limit have been reached
可以通过命令行指定后开启抓包,也可以开启后在内部过滤
- -d网口或设备
- -I主要是用于查看指定的pcap文件,以便查看sip对话的可视化图
- -O主要是将实时抓包的数据输出到文件
- -r主要是抓RTP, 指的是实时传输协议(Real-time Transport Protocol, RTP)数据包的有效载荷部分。RTP 是一个用于传输音频和视频等多媒体数据的网络协议,常用于流媒体服务、语音通信系统(如VoIP)、视频会议等场景中。
- -l给到数量限制,这个是重要的
- -T将pcap保存到文本文件
以上是比较常规的参数,常规的使用就是根据一些规则去抓取网络数据包,将pcap文件读取后展示。
如何抓取
sngrep, 直接开启抓,不管三七二十一,全抓

sngrep -d eth0 -O save.pcap port 5060 and udp,指定eth0网口,将数据保存到save.pcap文件,指定端口5060,指定udp类型

F7 开启页面过滤:
- 关键词筛选 SIP From/SIP To/Source/Destination/Playload
- 筛选信令类型,空格选中或取消
- Filter 过滤
F6 查看类似tcpdump的原始数据
 F2 Save就类似于-O,但是可以在页面筛选、取消某些会话的导出,-O就是全部了
 Enter 看流图

如何查看pcap文件
sngrep -I file.pcap host 192.168.1.1 and port 5060, 从file.pcap读取抓包数据,过滤host和端口



















