1. 安装
1.1. centos
vim /etc/yum.repos.d/irontec.repo
[irontec]
name=Irontec RPMs repository
baseurl=http://packages.irontec.com/centos/$releasever/$basearch/
rpm –import http://packages.irontec.com/public.keyyum install sngrep
1.2 debian/ubuntu
# debian 安装sngrep
echo "deb http://packages.irontec.com/debian jessie main" >> /etc/apt/sources.list
wget http://packages.irontec.com/public.key -q -O - | apt-key add -
apt-get install sngrep -y
debian buster 即 debian10以上可以直接 apt-get install sngrep
1.3 arch/manjaro
yay -Syu sngrep
参考: https://aur.archlinux.org/packages/sngrep/
如果报错,编辑 /etc/makepkg.conf文件,删除其中的-Werror=format-security
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection"
2. 命令行参数
sngrep
[-hVcivNqrD]
[-IO pcap_dump]
[-d dev]
[-l limit]
[-k keyfile]
[-LH capture_url]
[<match expression>]
[<bpf filter>]
-h --help
: 显示帮助信息-V --version
: 显示版本信息-d --device
: 指定抓包的网卡-I --input
: 从pacp文件中解析sip包-O --output
: 输出捕获的包到pacp文件中-c --calls
: 仅显示invite消息-r --rtp
: Capture RTP packets payload 捕获rtp包-l --limit
: 限制捕获对话的数量-i --icase
: 使大小写不敏感-v --invert
: 颠倒(不太明白)-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-R --rotate
: Rotate calls when capture limit have been reached.-H --eep-send
: Homer sipcapture url (udp:X.X.X.X:XXXX)-L --eep-listen
: Listen for encapsulated packets (udp:X.X.X.X:XXXX)-k --keyfile
: RSA private keyfile to decrypt captured packets
3. 页面
sngrep有四个页面,每个页面都有一些不同的快捷键。
- 呼叫列表页面
- 呼叫流程页面
- 原始呼叫信息页面
- 信息对比页面
3.1 呼叫列表页面
快捷键
- Arrow keys: Move through the list,除了上下箭头还可以使用j,k来移动光标
- Enter: Display current or selected dialog(s) message flow
- A: Auto scroll to new calls,自动滚动到新的call
- F2 or s: Save selected/all dialog(s) to a PCAP file, 保存dialog到pacp文件
- F3 or / or TAB: Enter a display filter. This filter will be applied to the text lines in the list,进入搜索
- F4 or x: Display current selected dialog and its related one. 回到第一个sip消息上
- F5: Clear call list, 清空呼叫列表
- F6 or r: Display selected dialog(s) messages in raw text, 显示原始的sip消息
- F7 or f: Show advanded filters dialogs 显示高级过滤弹窗
- F9 or l: Turn on/off address resolution if enabled
- F10 or t: Select displayed columns, 显示或者隐藏侧边sip消息栏
呼叫列表页面还能够显示两个弹窗, 按f可以显示高级过滤配置
按t可以显示, 自定义呼叫列选项弹窗
3.2 呼叫流程页面
快捷键
**Keybindings:
- Arrow keys: Move through messages
- Enter: Display current message raw (so you can copy payload)
- F2 or d: 显示sdp消息,f2的某个模式会让时序图更紧凑
- F3 or t: 显示或者关闭sip侧边栏
- F4 or x: 回到顶部
- F5 or s: 每个ip地址仅仅显示一列
- F6 or R: 显示原始的sip消息
- F7 or c: 改变颜色模式, 有的颜色模式很容易让人无法区分当前查看的sip消息是哪一个,所以需要改变颜色模式
- F9 or l: Turn on/off address resolution if enabled
- 9 and 0: 增加或者减少侧边栏的宽度
- T: 重绘侧边栏
- D: 仅显示带有sdp的消息
- 空格键:选中一个sip消息,再次找个sip消息,然后就会进入对比模式
- F1 or h: 显式帮助信息页面
3.3 原始sip消息界面
3.3 消息对比界面
在呼叫列表页面按空格键选中一个消息,然后选择另外一个sip消息后,再次按空格键,就可以进入消息对比页面
4. 分析媒体问题
使用 sngrep -r
可以用来捕获媒体流,默认不加 -r
则只能显示信令。
在呼叫流程页面,按下F3, 可以动态的查看媒体流的情况。在分析语音问题时,这是非常方便的分析工具。
5. 扩展技法
5.1 无界面模式
假如说有个很大的语音文件,假如说有1.5G吧,如果用wireshark直接打开,有可能wireshark直接卡死,也有可能在搜索的时候就崩溃了。
即使有sngrep来直接读取pcap文件,也可能会非常慢。
假如说我们只想从这1.5G文件中找到本叫号码包含1234的,应该怎么处理呢?
用下面的命令就可以:
sngrep -rI test.pcap 1234 -N -O dst.pcap
Dialog count: 17
- -r 读区语音流
- -I 从pcap文件中读取
- -N 不要界面
- -O 将匹配的结果写到其他文件中
经过上面的命令,一个很大的pcap文件,在处理之后,就会变成我们关心的小的包文件。比较容易处理了。
5.1 个性化配置
在呼叫列表界面,按F8可以进入到个性化配置界面,如下:
个性化配置页面有三个Tab页面, 三个页面可以用翻页的pageUp, pageDown来切换。在macbook上可能没有翻页键,那你要用fn + 上下方向键 来翻页
- Interface
- Capture
- Call Flow
在每个页面可以用上下键来选择不同的设置项,按左右键改变对应的值。也可以按空格键来改变对应的值。
在每个Tab页面,可以按Tab键在设置项和下面的Accept和Save、Cancel之间切换。
我们的个性化配置可以用Save来保存下来,不然每次都要再设置一边。
1. interface 页面
2. Capture设置界面
配置抓包相关的信息,例如最大抓包的数量,网卡设备,是否启用事务,默认的保存文件路径等等。
3. Call Flow页面
这个页面用来设置呼叫时序图页面。就不再过多介绍。
我用的比较多的,可能是Merge Columns witch same addrsss。 sngrep默认用IP:PORT作为时序图中的一个竖线。但是如果IP相同,端口号不同。sngrep就会划出很多竖线。启用了改项之后,就只会根据IP来划竖线。
区分IP和端口: Merge columns with same address
- on 表示只根据IP来划竖线
- off 表示根据IP:PORT来划线,如果你想在竖线上能看到端口信息,则需要设置为off
如下图所示,Merge columns with same address: off
如何更容易区分当前是在哪一信令上?
有时候移动的快一点,例如只能看到SIP消息是REGISTER, 但是具体是哪一个REGISTER, 看的眼疼也区分不出来。
这时候Call Flow中的Selected message highlight就派上用场。
- blod 加粗
- reverse 反色
- reverseblod 反色并且加粗
一般情况下,reverse或者reverseblod都能让你更好的区分,下面就是使用reverser模式下的时序图
可以很明显的看到,第三个REGISTER的背景色变一大块,所以当前就是在第三个REGISTER信令上。
6 . sngrep使用注意点
- 不要长时间用sngrep抓包,否则sgrep会占用非常多的内存。如果必须抓一段时间的包,务必使用tcpdump。
- 某些情况下,sngrep会丢包
- 某些情况下,sngrep会什么包都抓包不到,注意此时很可能要使用-d去指定抓包的网卡
- sngrep只能捕获本机网卡的收到和发送的流量。假如ABC分别是三台独立虚拟机的SIP服务器,在B上抓包只能分析A-B, 和B-C直接的流量。
- 再次强调:sngrep不适合长时间抓包,只适合短时间抓包分析问题。如果你需要记录所有的sip消息,并展示。可以考虑使用siphub,或者homer。