Linux中tcpdump过滤UDP流媒体需分层筛选:先按协议和端口(如554、9000、5000/5001、49152–65535)定位,再结合源/目的IP限定方向,排除回环与广播,最后用UDP载荷长度(如60–200字节)辅助识别RTP流。

Linux中用tcpdump过滤UDP流媒体数据,核心是结合协议类型、端口范围、IP地址和载荷特征做分层筛选,而非直接匹配“流媒体”语义——因为tcpdump本身不识别应用层协议类型,只认网络层和传输层字段。
按常见流媒体端口快速定位
多数实时流媒体(如RTP、RTSP、SRT、WebRTC音视频)默认使用动态或约定端口,可先按典型范围抓取:
- RTSP控制信令常用554端口:sudo tcpdump -i any udp port 554
- RTP媒体流多在1024–65535之间,常与RTCP成对出现(端口±1),可抓连续端口:sudo tcpdump -i any 'udp and (port 5000 or port 5001)'
- SRT协议默认使用9000端口:sudo tcpdump -i any udp port 9000
- WebRTC常用UDP端口范围较广,建议配合目标IP缩小范围:sudo tcpdump -i any udp and host 192.168.1.100 and portrange 49152-65535
结合IP和方向排除干扰流量
流媒体通常有明确的客户端/服务端角色,用src/dst限定能大幅减少噪声:
- 只看从摄像头(192.168.1.50)发来的RTP流:sudo tcpdump -i any 'udp and src host 192.168.1.50 and dst port 5000'
- 只捕获发往播放器(10.0.0.20)的UDP包:sudo tcpdump -i any 'udp and dst host 10.0.0.20'
- 排除本地回环和广播包(避免干扰):sudo tcpdump -i any 'udp and not host 127.0.0.1 and not dst 255.255.255.255'
用载荷长度辅助识别RTP等典型流
RTP包有固定头部结构,且媒体帧长度相对稳定。虽然不能解码,但可通过UDP载荷大小做粗筛:
- RTP音频包(如Opus)常为60–200字节:sudo tcpdump -i any 'udp[8:2] > 60 and udp[8:2] (udp[8:2]是UDP长度字段,单位字节)
- 过滤掉极小包(如仅8字节的空RTCP):sudo tcpdump -i any 'udp and greater 100'
- 注意:该方法需配合端口或IP使用,否则会混入DNS、NTP等其他小UDP包
保存为pcap供Wireshark深度分析
单纯命令行难判断是否真是流媒体,建议先保存原始包,再用Wireshark识别RTP流、查看SSRC、统计抖动与丢包:
- 静默捕获1分钟RTP相关UDP包:sudo tcpdump -i any -w stream.pcap -G 60 'udp and (port 554 or portrange 5000-5010)'
- 验证是否捕到有效数据:tcpdump -r stream.pcap -c 3 -A | head -n 20(看是否有可读协议标识)
- 后续在Wireshark中用显示过滤器 rtp || rtcp || rtsp 快速聚焦


















