安装请参考 https://github.com/irontec/sngrep/wiki/Building
一、演示使用centos7安装配置
git clone git@github.com:irontec/sngrep.git –depth=1
cd sngrep/
./bootstrap.sh
报错缺少依赖 直接安装依赖即可
yum install -y ncurses-devel make libpcap-devel pcre-devel openssl-devel git gcc autoconf automake
脚本执行成功
你可以将以下标志传递给. /configure 以启用某些功能
配置标志功能
–with-openssl 添加OpenSSL支持来解析捕获的消息( 请求。 libssl )
–with-gnutls 添加GnuTLS支持来解析捕获的消息( 请求。 gnutls )
–with-pcre 在正则表达式字段中添加Perl兼容的正规表达式 支持
–enable-unicode 添加 Ncurses/unicode支持( 要求。 libncursesw5 )
–enable-ipv6 启用IPv6数据包捕获支持。
–enable-eep 启用EEP数据包发送/接收支持。
./configure
执行成功
make && make install
二、运行sngrep
呼叫列表窗口
空格选中呼叫流 ,回车进入
呼叫流窗口
CSeq简单的呼叫流着色消息
通过请求/响应着色消息的多个呼叫流的组合视图
点击回车进入调用原始窗口
空格选中两条消息流,回车进入消息差异窗口
F8设置
列表选择
F7滤镜对话框
F2保存对话框
统计
sngrep 参数
-h --help:显示帮助信息
-V --version:显示版本信息
-d --device:指定抓包的网卡
-I --input:从pacp文件中解析sip包
-O --output:输出捕获的包到pacp文件中
-c --calls:仅显示邀请消息
-r --rtp:捕获RTP数据包有效载荷捕获rtp包
-l --limit:限制捕获对话的数量
-i --icase:使大小写不敏感
-v --invert:颠倒(不太明白)
-N --no-interface:不显示sngrep界面,仅捕获
-q --quiet:不要在***面模式下打印捕获的对话框
-D --dump-config:打印活动的配置设置并退出
-f --config:从文件中读取配置
-R --rotate:达到捕获限制时轮换呼叫。
-H --eep-send:荷马sipcapture网址(udp:XXXX:XXXX)
-L --eep-listen:监听封装的数据包(udp:XXXX:XXXX)
-k --keyfile:RSA私钥文件解密捕获的数据包
抓取INVITE请求的包:
sngrep ^INVITE
抓取REGISTER请求的包:
sngrep ^REGISTER
抓取OPTIONS请求的包:
sngrep ^OPTIONS
捕获端口5060上的所有SIP数据包:
sngrep port 5060
使用sngrep查看来自pcap文件的SIP数据包,并使用过滤器:
sngrep -I file.pcap host 192.168.1.1 and port 5060
或实时捕获,将数据包保存到新文件:
sngrep -d eth0 -O save.pcap port 5060 and udp
三、页面
sngrep有四个页面,每个页面都有一些不同的快捷键。
呼叫列表页面
呼叫流程页面
原始呼叫信息页面
信息对比页面
呼叫列表页面
快捷键
• 箭头键:在列表中移动,除上下箭头还可以使用j,k来移动光标
• 输入:显示当前或所选对话框的消息流
• 答:自动滚动到新电话,自动滚动到新的电话
• F2或S:将所选/所有对话框保存到PCAP文件,保存对话框到pacp文件
• F3或/或TAB:输入显示过滤器。该过滤器将应用于列表中的文本行,进入搜索
• F4或x:显示当前选择的对话框和其相关的一个。回到第一个SIP消息上
• F5:清除通话清单,清空通话清单
• F6或r:以原始文本显示所选对话框的消息,显示原始的sip消息
• F7或f:显示高级过滤器对话框显示高级过滤弹窗
• F9或l:如果启用,则打开/关闭地址解析
• F10或t:选择显示的列,显示或隐藏侧边sip消息栏
呼叫列表页面还能够显示两个弹窗,按f可以显示高级过滤配置
按t可以显示,自定义呼叫列选项弹窗
呼叫流程页面
快捷键
键绑定:
• 方向键:浏览消息
• 输入:显示当前的原始消息(以便您可以复制有效负载)
• F2或d:显示sdp消息,f2的某个模式变为时序图更紧凑
• F3或t:显示或关闭sip侧边栏
• F4或x:回到顶部
• F5或s:每个ip地址仅显示一列
• F6或R:显示原始的sip消息
• F7或c:更改颜色模式,有的颜色模式很容易让人无法区分当前查看的sip消息是哪一个,所以需要更改颜色模式
• F9或l:如果启用,则打开/关闭地址解析
• 9和0:增加或减少侧边栏的宽度
• T:重绘侧边栏
• D:仅显示带有sdp的消息
• 空格键:选择一个sip消息,再次找个sip消息,然后就会进入对比模式
原始sip消息界面
消息对比界面
在呼叫列表页面上按空格键输入一个消息,然后选择另外一个sip消息后,再次按空格键,就可以进入消息对比页面
分析媒体问题
使用sngrep -r可以用来捕获媒体流,默认不加-r则只能显示信令。
在呼叫流程页面,点击F3,可以动态的查看媒体流的情况。在分析语音问题时,这是非常方便的分析工具。
ngrep使用注意点
• 如果不要抓取的sngrep抓包,否则sgrep会占用非常多的内存。如果必须抓取的包,则使用tcpdump。
• 某些情况下,sngrep会丢包
• 某些情况下,sngrep会什么包都抓包不到,注意此时很可能要使用-d去指定抓包的网卡
• 如果ABC分别是三台独立虚拟机的SIP服务器,在B上抓包只能分析AB,和BC直接的流量。sngrep只能捕获本机网卡的接收和发送的流量。
• 如果您需要记录所有的sip消息,并展示。可以考虑使用siphub,或者homer。
附件
sip信令的格式及状态码参考文章: https://www.cnblogs.com/11sgXL/p/13553517.html
请求消息类型及含义
请求消息 | 消息含义 |
INVITE | 发起会话请求,邀请用户加入一个会话,会话描述含于消息体中。对于两方呼叫来说,主叫方在会话描述中指示其能够接受的媒体类型及其参数。 被叫方必需在成功响应消息的消息体中指明其希望接受哪些媒体,还可以指示其行将发送的媒体。如果收到的是关于参加会议的邀请,被叫方可以根据 Call-ID或者会话描述中的标识确定用户已经加入该会议,并返回成功响应消息。 |
ACK | 证实已收到对于 INVITE 请求的最终响应。该消息仅和 INVITE 消息配套使用。 |
BYE | 释放已建立的呼叫 |
CANCEL | 取消尚未完成的呼叫请求,对于已完成的请求(即已收到最终响应的请求)则没有影响。 |
REGISTER | 向SIP网络服务器登记用户位置信息 → 即注册认证 |
OPTIONS | 查询服务器的能力 |
状态码 消息功能
1xx 信息响应(呼叫进展响应)0 表示已经接受到请求消息,正在对其进行处理
100 试呼叫
180 振铃
181 呼叫正在前转
182 排队
2xx 成功响应 表示请求已经被成功接收、处理并被成功接受
200 OK
3xx 重定向响应 表示需要采取进一步动作,以完成该请求消息
300 多重选择
301 永久迁移
302 临时迁移
303 见其他
305 使用代理
380 代换服务
4xx 客户出错 表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理
400 错误请求
401 无权
402 要求付款
403 禁止
404 没有发现
405 不允许的方法
406 不接受
407 要求代理权
408 请求超时
410 消失
413 请求实体太大
414 请求URI太大
415 不支持的媒体类型
416 不支持的URI方案
420 分机无人接听
421 要求转机
423 间隔太短
480 暂时无人接听
481 呼叫腿/事务不存在
482 相环探测
483 调频太高
484 地址不完整
485 不清楚
486 线路忙
487 中止请求
488 此处不接受
491 待处理请求
493 难以辨认
5xx 服务器出错 表示SIP服务器故障不能完成对正确消息的处理
500 内部服务器错误
501 没实现的
502 无效网关
503 不提供此服务
504 服务器超时
505 SIP版本不支持
513 消息太长
6xx 全局故障 表示请求不能在任何SIP服务器上实现
600 全忙
603 拒绝
604 都不存在
606 不接受
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39768762/article/details/111849436