要抓取SIP语音通话报文,核心是捕获SIP信令(通常走UDP/TCP端口5060或5061)和配套RTP媒体流(动态端口,常为10000–20000),tcpdump仅抓包不解析,需配合sngrep或Wireshark分析通话流程。

要抓取 SIP 语音通话报文,核心是捕获 SIP 信令(通常走 UDP/TCP 端口 5060 或 5061)和配套的 RTP 媒体流(动态端口,常为 10000–20000 范围),但 tcpdump 本身不解析 SIP 结构,需配合过滤 + 后续工具(如 sngrep、Wireshark)才能清晰分析通话流程。
一、确认 SIP 服务端口和网络接口
多数 SIP 信令默认使用 UDP 5060(明文)或 TCP/UDP 5061(TLS 加密),先确认实际部署情况:
- 查本机监听:运行
ss -tuln | grep ':5060\|:5061'或netstat -tuln | grep ':5060' - 查可用网卡:执行
sudo tcpdump -D,选出真实收发流量的接口(如eth0、ens192,避免用lo除非测试本地回环)
二、用 tcpdump 抓取 SIP 信令包
推荐组合参数:指定接口、禁用 DNS 解析、完整截包、限定协议与端口:
- 抓 UDP 5060 的 SIP 信令(最常见):
sudo tcpdump -i eth0 -nn -s 0 udp port 5060 -w sip_signaling.pcap - 同时抓 TCP 和 UDP 的 5060/5061:
sudo tcpdump -i eth0 -nn -s 0 \(tcp port 5060 or tcp port 5061 or udp port 5060 or udp port 5061\) -w sip_all.pcap - 若已知主叫/被叫 IP,可进一步缩小范围:
sudo tcpdump -i eth0 -nn -s 0 udp port 5060 and host 192.168.2.105 -w sip_cti.pcap
注意:-s 0 防止截断(SIP 消息含 SDP,可能较长);-nn 提升输出效率且避免解析延迟。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
三、补充抓取 RTP 媒体流(可选但建议)
SIP 只负责呼叫控制,语音实际走 RTP(常为 UDP)。由于 RTP 端口在 SDP 中动态协商,无法直接按固定端口抓全,但可:
- 抓大范围端口(如 10000–20000)并结合 SIP 时间段筛选:
sudo tcpdump -i eth0 -nn -s 0 udp portrange 10000-20000 -w rtp_media.pcap - 更稳妥做法:先用上述 SIP 抓包获取 Call-ID 和媒体端口,再针对性重抓对应时间段的 RTP 流(需时间同步或用
-G定时轮转)
四、分析 SIP 报文的实用方式
tcpdump 输出是原始二进制,不适合直接读 SIP 内容。推荐后续处理路径:
-
用 sngrep 实时查看(专为 SIP 设计):
安装后直接读 pcap:sngrep -r sip_signaling.pcap,或实时监听:sngrep -i eth0 port 5060,自动关联 INVITE/200 OK/ACK/BYE 等事务 -
用 Wireshark 图形化分析:打开
sip_signaling.pcap,应用显示过滤器sip或udp.port == 5060,右键某 INVITE → “Follow → SIP Stream” 查看完整会话 -
命令行快速定位关键字段:
tcpdump -r sip_signaling.pcap -A -nn | grep -i "INVITE\|SIP/2.0\|From:\|To:\|Call-ID:"
不复杂但容易忽略:SIP 抓包务必确保防火墙未丢弃 5060/5061 包,且目标设备确实在该网卡上收发流量——否则可能“有信令无媒体”或“完全抓不到”。

















