调试 SIP 服务器是 VoIP 工程师的日常苦差事——注册、呼叫、订阅,每一步都要拼 SIP 消息、盯日志、抓包验证。sipexer 把这些操作收进一条命令,v2.0.0 又加了几个高频场景的快捷入口,值得放进你的工具箱。
从手动拼消息到一行命令
传统做法是拿 SIPp 写 XML 场景脚本,或者用 sipsak 发单条请求,再配合 Wireshark 看结果。流程长、脚本难复用,排查一个问题往往要折腾半小时。
sipexer 的思路不同:它把常见 SIP 信令操作封装成 CLI 子命令,你只需要指定服务器地址和用户信息,剩下的消息构造、流程编排它全包。v2.0.0 在这个基础上新增了三个直接可用的测试入口:
--call-self:注册一个用户,然后让该用户呼叫自己——最快速验证注册和基本呼叫链路是否通畅。--call-user:注册两个不同用户,A 呼 B,B 接听后挂断——验证端到端呼叫的完整流程。--subscribe-session:发送 SUBSCRIBE 请求并等待 NOTIFY 回调——测试事件订阅机制是否正常。
这三个选项覆盖了 SIP 服务器最核心的三条链路:注册-自呼、双用户互呼、订阅-通知。日常排查中,80% 的问题出在这三条路上。
实际上手:用 sipexer 测一台 SIP 服务器
下面用几个真实场景演示 sipexer v2.0.0 的用法。假设你有一台 SIP 服务器跑在 sip.example.com:5060,域配置为 example.com。
场景一:快速验证注册和自呼
刚部署完服务器,第一步是确认注册通道和基本呼叫能走通:
# 注册用户 1001 并让该用户呼叫自己
sipexer --server sip.example.com:5060 \
--domain example.com \
--user 1001 \
--password secret123 \
--call-self
执行后 sipexer 会依次完成:REGISTER → 200 OK → INVITE 自呼 → 200 OK → ACK → BYE → 200 OK。如果任何一步失败,终端直接打印错误码和原因,不用再去翻 pcap。
场景二:双用户端到端呼叫
自呼通了不代表两台终端之间没问题。用 --call-user 注册两个用户并互呼:
# 注册 1001 和 1002,1001 呼叫 1002
sipexer --server sip.example.com:5060 \
--domain example.com \
--caller 1001 --caller-password secret123 \
--callee 1002 --callee-password secret456 \
--call-user
这条命令会注册两个账号,然后从 1001 发 INVITE 到 1002,完成完整的呼叫-接听-挂断流程。如果 1002 的 REGISTER 成功但 INVITE 被拒绝,说明服务器路由或 NAT 配置有问题——定位速度比手动抓包快得多。
场景三:订阅与通知机制验证
Presence、MWI(消息等待指示)等业务依赖 SUBSCRIBE/NOTIFY 机制。用 --subscribe-session 测试:
# 用户 1001 订阅 presence 事件,等待 NOTIFY
sipexer --server sip.example.com:5060 \
--domain example.com \
--user 1001 \
--password secret123 \
--subscribe-session \
--event presence
sipexer 发送 SUBSCRIBE,如果服务器返回 200 OK 并随后推送 NOTIFY,终端会打印 NOTIFY 内容。如果只收到 200 却没有 NOTIFY,说明后端事件引擎可能没触发或订阅过期时间配置有误。
批量回归测试的小脚本
版本升级后要做回归?写个简单 shell 脚本跑完三条核心链路:
#!/usr/bash
# sip_regression.sh — 三链路快速回归
SERVER="sip.example.com:5060"
DOMAIN="example.com"
echo "=== 1. 自呼测试 ==="
sipexer --server $SERVER --domain $DOMAIN \
--user 1001 --password secret123 --call-self
if [ $? -ne 0 ]; then echo "自呼失败"; exit 1; fi
echo "=== 2. 双用户互呼测试 ==="
sipexer --server $SERVER --domain $DOMAIN \
--caller 1001 --caller-password secret123 \
--callee 1002 --callee-password secret456 --call-user
if [ $? -ne 0 ]; then echo "互呼失败"; exit 1; fi
echo "=== 3. 订阅通知测试 ==="
sipexer --server $SERVER --domain $DOMAIN \
--user 1001 --password secret123 \
--subscribe-session --event presence
if [ $? -ne 0 ]; then echo "订阅失败"; exit 1; fi
echo "全部通过 ✓"
丢进 CI pipeline 或 cron,每次服务器变更后自动跑一遍,比人肉验证可靠。
注意事项与适用边界
sipexer 定位是信令测试工具,不是媒体流量生成器。它能验证 SIP 消息流程是否正确,但不测 RTP 语音质量——音频通路还得靠 RTP 工具或实际通话主观评估。
几个使用要点:
- 服务器端要开启测试账号:sipexer 需要真实可注册的用户名和密码,生产环境建议用隔离的测试号段。
- 防火墙放行:确保测试机器到 SIP 服务器 5060/5061 端口可达,UDP 和 TCP 都试一下。
- TLS 场景:如果服务器强制 TLS,加上
--transport tls选项(具体参数以 sipexer 官方文档为准)。 - 超时设置:网络差时默认超时可能不够,留意
--timeout类参数调整等待时间。
什么时候该用 sipexer
| 场景 | 推荐工具 |
|---|---|
| 快速验证注册/呼叫/订阅链路 | sipexer |
| 大规模压力测试(千路并发) | SIPp |
| 单条 SIP 消息调试 | sipsak |
| 抓包分析细节 | Wireshark |
sipexer 填的是"快速验证"这个空档——部署后跑一遍确认基本链路没问题,排查时一条命令定位故障环节。v2.0.0 的三个新选项让最常见的测试场景不再需要写脚本,直接敲命令就行。如果你的日常工作涉及 SIP 服务器运维,建议装上 sipexer,把上面的回归脚本存一份,下次出问题时省下半小时。