windows:Wireshark抓包,打开wireshark,选择抓包的网卡,输入过滤条件,常用过滤条件:
1、过滤IP: ip.addr == 192.168.21.45
2、过滤端口:tcp.port == 5060 || udp.port == 5060
3、根据消息协议过滤,如:sip,sip.Call-ID == "MTI2Y2YyMD", rtp, rtp.ssrc == 12345, http等
注:! && || 非且或3个符号linux/win通用,不喜欢写 not and or
本机抓包:本机发送到本机的数据包不会经过网卡,无法抓到包,需要设置路由
route add 本机ip mask 255.255.255.255 网关ip
如:route add 92.168.136.200 mask 255.255.255.255 192.168.128.1
使用完毕后用route delete 192.168.136.200 mask 255.255.255.255 192.168.128.1删除,否则所有本机报文都经过网卡出去走一圈回来很耗性能。
linux 抓包:需要安装tcpdump, 可以直接yum或apt-get install tcpdump 安装,不能连网的话下载rpm包安装,需要下载libpcap和tcpdump的rpm包,rpm -Uvh +rpm包安装即可,
libpcap rpm包官方下载地址:http://www.rpmfind.net/linux/rpm2html/search.php?query=libpcap&submit=Search+...&system=&arch=
tcpdump rpm包官方下载地址:http://www.rpmfind.net/linux/rpm2html/search.php?query=tcpdump
这两地址就是在http://www.rpmfind.net/上搜一下libpcap和tcpdump就出来了,搬到csdn上赚c币骗小白不厚道。收藏好http://www.rpmfind.net/,好东西。
常用抓包命令:
1、-i 指定网卡如eth0, ip addr 看下,如果安装了k8s虚拟网卡太多,可以 ip addr|grep 192.168 快速找到,可以不指定,设为any 即可。
2、host 指定ip, port 指定端口,可以加tcp或udp限定协议,-vn 打印, -w 输出到文件,再拷贝到win上用wireshark打开。
简单的看下信令,直接打印即可:
tcpdump -i any udp port 5060 -vn (打印5060端口抓到的包)
写到文件:
tcpdump -i any udp port 5060 -vn -w sip.pcap
tcpdump -i any host 192.168.12.34 -vn -w sip.pcap 指定ip抓
加了-vn会提示抓到多少个包,ctrl +c 结束后拷贝sip.pcap 用wireshark打开分析。
wireshark分析技巧:
1、分析sip中会话流程(如invite流程)可过滤call-id, 见上面win过滤。
2、分析rtp:如果没有显示数据为rtp包,可选中一个包,右键选择“解码为”(倒数第二个选项),“当前“选择RTP(快速输入RTP会跳转)
OK解码成rtp包后,选择 电话-->RTP-->流分析
确认后就可分析出流的丢包、乱序等问题
左边写了,丢包28个占2.25%,乱序1个,将流保存下来,把后缀名强行改为.ps 或.h264/h265,即可播放,h264可以用eseye_u分析,h265的ps流的话只能用ffmpeg播,vlc播不了,若ps 流打包有问题,可以看另一篇“最简单的h264/h265/svac和g711封装成ps流”具体分析,常见的问题是h265打包成了264。
保存时一定要选择为raw原始数据,保存后再改后缀。
附:国标接入或级联某些小厂家时可能会出现视频下半截放不出来,这种现象90%是发送方pes包没处理好,pes包最大65535(u_short)。
如果是下半截严重花屏,多半是发送方没有做流量峰值控制,接收方扩大缓冲区可以解决,但容易丢包。简单的峰值控制定时循环时设置最大发送rtp包数即可。
海康h265的ps流中有0x00 0x00 0x01 0xbd字段,不知道啥用,注意解ps流时去掉它附带的数据就行。