sngrep是一个用于分析SIP信令的工具,它可以捕获和解码SIP信令也是一款专业的sip抓包工具,且可以解析tcpdump抓出来的包。 sip协议(会话初始协议),是一种多媒体通信协议;
sip协议的消息主体(报文部分)一般使用的是SDP消息格式。 RTP是一种数据传输协议
tcpdunmp的基本抓包命令:tcpdump -s 0 -i eth0 udp -w outbound_m_22.pcap
-i指定了网卡
-w 抓包后的文件名
sngrep也存在抓包命令,但是没有具体用过。这里记录几个用过的命令
sngrep -d eth0 指定网卡抓包,仅抓通过网卡eth0的信息;
sngrep -I in.pcap 用sngrep打开用tcpdump打开的抓包
前台使用sngrep
注: sngrep需单独安装,这里不描述安装过程
基本示例:
sngrep -n -s 5000 -d any /destination_ip/
解释:
-n 表示不将IP地址解析为主机名。
-s 5000 表示监听端口5000。
-d any 表示捕获所有网络接口上的数据包。
/destination_ip/ 是你想要捕获信令流向的IP地址。
这个命令会捕获所有通过所有网络接口发往指定IP地址的数据包,并将其保存到标准输出。
如果你想要将捕获的信令保存到文件中,可以使用以下命令:
sngrep -n -s 5000 -d any /destination_ip/ > capture.txt
这会将输出重定向到名为capture.txt的文件。
为了过滤并只显示特定的SIP方法(如INVITE),可以使用-W选项:
sngrep -n -s 5000 -d any -W "INVITE" /destination_ip/
在命令行输入sngrep,进入到主页面
最下面的一行展示了一些用法介绍
Esc退出当前工具
Enter进入了消息详情
space 选中当前数据,再次点击取消选择
F1进入帮助页面
F2保存符合条件列(比如选中的列,符合筛选条件的列等)
F3进入搜索页面,可以按条件进行搜索
F4将选中行的信息在一个屏幕内进行拼接展示
F5清除当前页面的内容
F7进行筛选条件的设置
F10 自定义设置需要展示的列
保存文件
扩展拼接展示
自定义设置需要展示的列之后的效果
请求详情页面
最下面的一行展示了一些用法介绍
Esc返回上一层
Enter上下滑动,选择消息后,点击进入了消息详情
space 选中当前数据,滑动再次选择一条数据,会将这两条的数据进行对比
F1进入帮助页面
F2显示SDP消息格式的一些信息。包括: 地址信息,每天类型,占用端口,编码方式,频率等信息
F3打开RTP流的信息,展示了当前rtp流的编码,媒体传输数量,双方端口号,若是正在进行的会话。会显示是否有数据流传输
F4回到第一个消息
s修改地址栏是否展示地址端口
F6以Raw格式展示协议
c 进行颜色的调整
9向左移动报文,0向右移动报文
SDP文本信息中,a=sendrecv表示消息是有效的;a=inacative表示消息是无效的;
媒体端口是0,也表示消息是无效的;
a=rtpmap:101 telephone-event/16000表示按键信息,但是sngrep不会展示按键信息;=rtpmap:18 G729/8000 协商的一种编码信息
数据对比
响应页面
附件
sip信令的格式及状态码参考文章:
请求消息类型及含义
请求消息 消息含义
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 | 不接受 |