抓包经验

对讲终端脱机抓包通用分析指南

目录

  1. 抓包准备阶段
  2. 抓包操作步骤
  3. Wireshark分析关键点
  4. 常见问题解决方案
  5. 高级分析技巧
  6. 无法解决时的进一步操作

1. 抓包准备阶段

1.1 确定抓包位置

  • 关键接口:在服务器上抓取与问题终端通信的网卡流量(通常是对讲系统使用的业务网卡)
  • 辅助接口:若服务器有多个网卡(如管理网卡、业务网卡),需确认目标终端连接的物理端口或VLAN

1.2 安装Wireshark

  • Windows服务器

  • Linux服务器

    bash 复制代码
    # Ubuntu/Debian
    sudo apt update
    sudo apt install wireshark
    sudo usermod -aG wireshark $USER  # 将当前用户加入wireshark组
    newgrp wireshark                 # 刷新组权限             # 刷新组权限

1.3 配置镜像端口(如需跨设备抓包)

  • 若问题终端与服务器不在同一设备
    • 在交换机上配置端口镜像,将目标终端的流量镜像到服务器网卡

    • 示例命令(华为交换机):

      bash 复制代码
      observe-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直接打开
  • 选择服务器与终端通信的网卡(如 eth0192.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 开始抓包并重现问题

  1. 点击 鲨鱼鳍图标 开始捕获
  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协议分析 (常见对讲系统协议):
    • 过滤:sipsip.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 RSTICMP 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. 高级分析技巧

  1. 绘制呼叫流程图
    Statistics > Flow Graph → 选择 "Limit to display filter"

  2. 追踪特定会话

    右键SIP数据包 → Follow > UDP Stream

  3. 解码自定义协议

    若使用私有协议,通过 Analyze > Decode As 指定端口和协议类型

  4. 时间分析

    在问题时间点右键标记 → Set Time Reference,计算响应延迟


6. 无法解决时的进一步操作

  1. 交叉验证

    • 目标终端侧抓包,对比服务器流量
    • 交换机镜像口抓包,确认流量是否到达网络设备
  2. 收集日志

    • 服务器日志(如FreeSWITCH的 /var/log/freeswitch/freeswitch.log
    • 终端日志(联系设备厂商获取)
  3. 协议模拟测试

    使用 sipsaksipp 工具模拟呼叫,隔离终端故障:

    bash 复制代码
    sipsak -s sip:目标终端IP -v -U 问题终端IP

最后更新日期:2025年7月6日