手拉手教你如何抓包分析SIP信令协议

一、引言

SIP(会话初始协议)在现代通信领域,尤其是VoIP(网络电话)中起着至关重要的作用。抓包分析SIP信令可以帮助我们理解通信流程、排查故障以及进行性能优化。本文将详细介绍在Windows和Linux系统下抓包分析SIP信令的方法,即使是刚入行的新手也能轻松上手。

二、Windows系统下使用Wireshark抓包

2.1 打开Wireshark并选择抓包接口

如果你使用的是Windows系统,首先打开Wireshark抓包软件。由于本文示例是本地启动的SIP信令服务器,所以选择“Adapter for loopback traffic capture”(本地环回网络)。双击该选项后,Wireshark会直接开始抓包,但此时显示的信息会非常繁杂,因为它会捕获本地网络的所有信息。

选择本地环回网络

2.2 使用过滤语法筛选流量

在Wireshark中,可以通过过滤语法(Display Filters)来筛选SIP协议流量和特定IP/端口的流量。以下是具体的筛选方法和示例:

2.2.1 筛选SIP协议流量
  • 筛选所有SIP协议流量:在过滤框中输入 sip,Wireshark会显示所有SIP协议(会话初始协议)的数据包,包括请求(如INVITE、REGISTER)和响应(如200 OK)。
  • 筛选特定SIP方法
    • 筛选INVITE请求:输入 sip.Method == "INVITE"
    • 筛选REGISTER请求:输入 sip.Method == "REGISTER"
    • 筛选响应码(如200 OK):输入 sip.Status-Code == 200
  • 筛选SIP消息头字段
    • 筛选包含特定Call-ID的SIP消息:输入 sip.Call-ID contains "abcdef12345"
    • 筛选From或To字段中的用户:输入 sip.from.user contains "alice" || sip.to.user contains "bob"
2.2.2 筛选IP地址和端口
  • 筛选特定IP地址
    • 筛选源或目标IP为192.168.1.100的流量:输入 ip.addr == 192.168.1.100
    • 筛选源IP为10.0.0.1的流量:输入 ip.src == 10.0.0.1
  • 筛选特定端口
    • 筛选SIP默认端口(5060)的流量:输入 tcp.port == 5060 || udp.port == 5060
    • 筛选源端口为5060的流量:输入 tcp.srcport == 5060 || udp.srcport == 5060
2.2.3 组合筛选条件
  • 筛选特定IP的SIP流量:输入 sip && ip.addr == 192.168.1.100
  • 筛选特定端口上的SIP方法(如5060端口的INVITE请求):输入 sip.Method == "INVITE" && (tcp.port == 5060 || udp.port == 5060)
  • 筛选某个用户(From字段)的SIP注册请求:输入 sip.Method == "REGISTER" && sip.from.user == "alice@domain.com"

2.3 高级技巧

  • 快速定位SIP会话流:右键点击SIP数据包,选择“Follow → UDP Stream”(或TCP Stream),即可查看完整的会话。
  • 保存过滤结果:筛选完成后,按 Ctrl + S 保存过滤后的数据包(仅显示部分)。
  • 捕获时预过滤:在捕获前设置过滤条件(Capture Filters),例如输入 host 192.168.1.100 and (port 5060 or sip)

2.4 常见问题及解决方法

  • 为什么筛选不到SIP流量? 确认数据包是否包含SIP协议,可能使用了非标准端口,如5061。使用 sip 过滤后,检查是否有数据包显示为SIP/SDP。
  • 如何区分TCP和UDP的SIP流量? 添加协议类型过滤,输入 sip && tcp 筛选TCP承载的SIP流量,输入 sip && udp 筛选UDP承载的SIP流量。
  • 筛选条件不生效? 检查语法是否正确,Wireshark的过滤语法区分大小写,例如是 ip.addr 而非 IP.Addr

2.5 查看SIP信令信息

筛选出SIP信令和本地设备的IP,并配置好设备的GB28181平台信息后,就能抓包到所有与设备交互的SIP信令。如果要查看具体的SIP信令信息,右下角有完整的协议信息可以查看,包括交互的网址和端口,以及指令消息,以下是一次完整的国标协议的设备注册指令。

SIP信令信息
SIP信令信息

三、Linux系统下抓包

3.1 使用tcpdump抓包

tcpdump 是一个轻量高效的命令行抓包工具,适合快速排查问题。

3.1.1 安装tcpdump

在Ubuntu系统上,可以使用以下命令安装:

sudo apt install tcpdump
3.1.2 示例命令
  • 抓取指定IP的ICMP流量:假设 enp3s0 是网卡名称,使用以下命令抓取指定IP的ICMP流量:
sudo tcpdump -i enp3s0 host 192.168.1.100 and icmp
  • 保存到文件并限制抓包时间:使用以下命令将抓包结果保存到文件 capture.pcap 中,并限制抓包时间为60秒:
sudo tcpdump -i enp3s0 -w capture.pcap -G 60

保存后的文件可以拷贝到Windows系统上,使用Wireshark打开进行分析。

3.2 使用sngrep抓包分析

sngrep 是一款专为SIP(Session Initiation Protocol)协议设计的命令行网络抓包与分析工具,主要针对VoIP(如电话、视频通话)流量进行实时捕获、过滤和可视化。

3.2.1 核心功能
  • 实时捕获与过滤:支持从网卡实时抓包,或读取已有的 .pcap 文件。可以按SIP方法(如INVITE、BYE)、IP、端口等条件过滤流量。
  • 会话流可视化:将SIP消息按会话(Call-ID)分组,显示完整的呼叫流程(如注册、呼叫建立、终止),类似Wireshark的 “Follow Stream” 功能,但更专注于SIP交互。
  • 关键字高亮与搜索:高亮关键字段(如状态码200 OK、487 Request Terminated),支持正则表达式搜索特定内容(如用户名、电话号码)。
  • 统计与报告:生成SIP事务统计(如请求/响应数量、错误率)。
3.2.2 安装方法

在Ubuntu/Debian系统上,可以通过以下命令安装:

sudo apt update
sudo apt install sngrep
3.2.3 基础使用示例
  • 实时捕获SIP流量
    • 捕获所有SIP流量(默认网卡):使用命令 sngrep
    • 指定网卡(如eth0):使用命令 sngrep -d eth0
    • 过滤特定IP或端口:使用命令 sngrep host 192.168.1.100 and port 5060
  • 读取已有抓包文件:使用命令 sngrep -I capture.pcap
  • 界面操作
    • 上下键:选择会话。
    • 回车键:展开会话详情。
    • /键:输入过滤表达式(如 sip.Method=INVITE)。
    • q键:退出。
3.2.4 常用命令行参数
参数说明
-d <网卡>指定捕获网卡(如eth0)
-H隐藏SIP消息体(简化显示)
-O <文件>将捕获结果保存为 .pcap 文件
-R <表达式>加载时过滤(如 sip.Method=REGISTER
-n禁用自动滚动(适合长会话分析)
3.2.5 典型应用场景
  • VoIP故障排查:快速定位呼叫失败原因(如403 Forbidden权限问题、408 Timeout超时)。
  • 监控SIP注册状态:检查终端设备(如IP电话)是否成功注册到SIP服务器。
  • 分析SIP攻击:识别异常流量(如大量INVITE洪水攻击)。
  • 调试SIP服务器配置:验证SIP路由规则、头域修改是否生效。

sngrep界面

四、总结

通过本文的介绍,你已经学会了在Windows和Linux系统下使用Wireshark、tcpdump和sngrep抓包分析SIP信令协议的方法。无论是新手还是有经验的开发者,都可以利用这些工具深入了解SIP通信流程,解决实际问题。希望本文能对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值