对讲终端脱机抓包通用分析指南
目录
1. 抓包准备阶段
1.1 确定抓包位置
- 关键接口:在服务器上抓取与问题终端通信的网卡流量(通常是对讲系统使用的业务网卡)
- 辅助接口:若服务器有多个网卡(如管理网卡、业务网卡),需确认目标终端连接的物理端口或VLAN
1.2 安装Wireshark
-
Windows服务器:
- 官网下载安装包:https://www.wireshark.org/
- 安装时勾选 Npcap(WinPcap的替代品,支持现代Windows)
-
Linux服务器:
bash# Ubuntu/Debian sudo apt update sudo apt install wireshark sudo usermod -aG wireshark $USER # 将当前用户加入wireshark组 newgrp wireshark # 刷新组权限 # 刷新组权限
1.3 配置镜像端口(如需跨设备抓包)
- 若问题终端与服务器不在同一设备 :
-
在交换机上配置端口镜像,将目标终端的流量镜像到服务器网卡
-
示例命令(华为交换机):
bashobserve-port 1 interface GigabitEthernet0/0/1 # 镜像到服务器所连端口 interface GigabitEthernet0/0/2 # 问题终端所连端口 port-mirroring to observe-port 1 both # 镜像进出双向流量
-
2. 抓包操作步骤
2.1 启动Wireshark并选择网卡
bash
sudo wireshark # Linux需提权,Windows直接打开
- 选择服务器与终端通信的网卡(如
eth0
或192.168.1.x
对应的接口)
2.2 设置抓包过滤器(减少噪声)
-
基础过滤 (根据终端IP):
ip.addr == 192.168.1.100 # 替换为目标终端的IP
-
协议过滤 (常见对讲协议):
udp.port == 5060 || udp.port == 10000-20000 # SIP+语音端口范围 || tcp.port == 80 || udp.port == 5061 # HTTP/HTTPS/SIPS
2.3 开始抓包并重现问题
- 点击 鲨鱼鳍图标 开始捕获
- 立即操作:从问题终端发起一次呼叫(触发"目标脱机"提示)
- 问题复现后,点击 红色停止按钮 结束抓包
2.4 保存抓包数据
File > Save As
保存为广播服务器_目标脱机.pcapng
3. Wireshark分析关键点
3.1 检查目标终端可达性
-
ARP解析 :搜索目标终端IP的ARP请求(过滤
arp
)- 若无ARP响应 → 终端离线或网络隔离
-
ICMP检测 (若允许ping):
icmp && ip.addr == 目标终端IP
- 无ICMP Reply → 网络层不通
3.2 分析呼叫信令流程
- SIP协议分析 (常见对讲系统协议):
- 过滤:
sip
或sip.Call-ID contains "会话ID"
- 正常流程:
INVITE → 100 Trying → 180 Ringing → 200 OK → ACK
- 异常场景 :
INVITE
无响应 → 目标终端未收到请求(防火墙拦截/终端离线)INVITE
返回404 Not Found
→ 终端未注册到服务器INVITE
返回503 Service Unavailable
→ 服务器路由错误
- 过滤:
3.3 检查终端注册状态
-
过滤终端IP的注册请求:
sip.Method == "REGISTER" && ip.src == 目标终端IP
-
若最后一次
REGISTER
过期(查看Expires
头),服务器会标记终端为离线
3.4 排查防火墙/中间设备干扰
-
查找 TCP RST 或 ICMP Destination Unreachable 数据包:
tcp.flags.reset == 1 || icmp.type == 3
-
此类包表明流量被中间设备(防火墙、路由器)拦截
3.5 分析会话超时
- 若呼叫建立后突然断开:
- 检查
SIP BYE
发起方(终端主动退出?) - 查看 RTP流 (语音流)是否中断:
Telephony > RTP > Stream Analysis
→ 检查丢包率和抖动
- 检查
4. 常见问题解决方案
问题根因 | 解决方案 |
---|---|
目标终端未注册 | 1. 检查终端网络配置 2. 确认终端到服务器的5060/5061端口可达 3. 抓取终端侧日志 |
SIP信令被防火墙拦截 | 1. 在服务器/防火墙上放行UDP 5060-5080端口 2. 关闭服务器临时防火墙:sudo ufw disable (测试用) |
NAT穿透失败 | 1. 服务器配置STUN/TURN服务 2. 修改SIP Contact 头为公网IP(如FreeSWITCH中设置external_sip_ip ) |
终端心跳超时 | 1. 延长SIP注册有效期(修改 Expires 值) 2. 配置OPTIONS心跳检测 |
服务器路由表错误 | 1. 检查SIP服务器配置(如FreeSWITCH的 dialplan ) 2. 确认目标终端在注册数据库中的状态 |
5. 高级分析技巧
-
绘制呼叫流程图 :
Statistics > Flow Graph
→ 选择 "Limit to display filter" -
追踪特定会话 :
右键SIP数据包 →
Follow > UDP Stream
-
解码自定义协议 :
若使用私有协议,通过
Analyze > Decode As
指定端口和协议类型 -
时间分析 :
在问题时间点右键标记 →
Set Time Reference
,计算响应延迟
6. 无法解决时的进一步操作
-
交叉验证:
- 在 目标终端侧抓包,对比服务器流量
- 在 交换机镜像口抓包,确认流量是否到达网络设备
-
收集日志:
- 服务器日志(如FreeSWITCH的
/var/log/freeswitch/freeswitch.log
) - 终端日志(联系设备厂商获取)
- 服务器日志(如FreeSWITCH的
-
协议模拟测试 :
使用
sipsak
或sipp
工具模拟呼叫,隔离终端故障:bashsipsak -s sip:目标终端IP -v -U 问题终端IP
最后更新日期:2025年7月6日