一个sip的抓包小工具,在GitHub上竟然能够积累1K的star,看来还是有点东西,当然官方的友链也是发挥了重要作用
首先送上项目地址,有能力的宝子可以自行查看
经典的网络抓包工具有很多,比如:
- Wireshark: 大而全
- tcpdump: 较底层
- Fiddler:主要用于HTTP/HTTPS协议
- ......
但是对于本章要讲的SIP信令的抓包,也就是Wireshark、tcpdump,以及前面讲到过较为系统的Homer,如果嫌弃Wireshark笨重、tcpdump原始,那么就一起来看看这款短小精悍的sngrep。
官方自己定义:是一款可以在命令行终端展示SIP电话消息流的工具,它能够支持实时的抓取并展现SIP包,也可以用来做一个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:
bash
./bootstrap.sh
./configure
make
make install (as root)
cmake:
bash
mkdir build && cd build
cmake [<options>] ..
make
make install (as root)
一切顺利,构建成功
如何使用?
sngrep 由于是网络抓包,因此至少需要sudo权限。
对于参数可以通过help来看一下
bash
# 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和端口