发布时间 : 星期日 文章TCPdump抓包及分析方法1 - 图文更新完毕开始阅读61726d67ddccda38376baf5d
1 关键字
Tcpdump, 丢包, 抓包
2 Tcpdump抓包的作用
Tcpdump是linux系统自带的抓包工具,功能: >抓进出Linux服务器的IP包
>抓下的IP包,可由WireShark等工具,解码为UDP和RTP包。 >抓下的IP包,可由WireShark等工具分析丢包情况
3 Tcpdump常用方法
Tcpdump是linux系统自带的抓包工具, 需要root权限才能运行。
3.1 指定网卡 tcpdump -i eth2 //抓网卡eth2上所有进出的数据包,如果没有数据包,则通常会抓到广播包
3.2 指定保存抓包结果的文件 tcpdump -i eth2 –w mstu2ether2.cap 3.3 抓完整的RTP包 tcpdump -i eth2 –w mstu2ether2.cap –s 0 “-s 0”指定抓的是完整的数据包,否则以64字节截断。对于MSTU上的RTP抓包,这个参数会保留所有TS数据包,故重要。
3.4 指定入向端口
设入向端口为11866,转换为十六进制,即是0x2e5a,所以:
tcpdump -i eth2 ether[36]=0x2e and ether[37]=0x5a -w mstu2eth2_2e5a_head.cap 其中, ether[36]和ether[37]为接收端口的16进制表示。
3.5 指定出向端口
设出向端口为11866,转换为十六进制,即是0x2e5a,所以: tcpdump -i eth2 ether[34]=0x2e and ether[35]=0x5a -w mstu2eth2_2e5a_head.cap 其中, Ether[34]和ether[35]为发送端口的16进制表示。
3.6 长时间抓包
在抓包命令后加“-C 100”,它会满100M后写到下一个新的文件。直到磁盘满。
3.7 后台执行
在抓包命令最后面再加一个&,这样可以后台一直抓。这样的话,登录窗口可以关掉。你想停止抓包,则得用PS把进程杀死。
4 抓包分析快进快退
4.1 找关键帧
RTP包是否为关键帧的标识保存在RTP扩展位中。WireShark查看RTP包是否为关键帧。
00或者10: 普通帧 20或者30: 关键帧首包 40或者50: 关键帧中间包 80或者90: 关键帧尾包
注:以上判断之所以有“或者”,是因为关键帧位只占了3比特。
4.2 判断时戳
如果抓包为32倍速,要判断时戳是否正常,则可以用抓包里的: (最大时戳-最小时戳)/90000/倍速=倍速播放时常
例如:
(709506270-490114260)/90000/32=76.17(秒)
然后可以查看每二列的Time是否约等于76秒。如果是,则是正常的。
5 抓包分析是否丢包
注意,不同版本的WireShark操作有所区别,下文中所用版本为1.3.0
5.1 主要步骤
>确定端口号并转换为16进制。 >确定抓包的网口
>抓包并保存结果到文件
>解码:用WireShark打开结果文件并解码为IP,然后再解码为RTP >用WireShark查看是否丢包
5.2 详细步骤
5.2.1 确定端口号并转换为16进制
例如入向端口为11866,转换为十六进制,即是0x2e5a
5.2.2 确定抓包的网口
MSTU收发直播码流是通过网口eth2或者eth3.
不指定保存结果的文件,直接在屏幕上看输出,这种方法可确定是哪个网口收码流
5.2.3 抓包并保存结果到文件 tcpdump -i eth2 ether[12]=0xff and ether[13]=0x09 and ether[36]=0x2e and ether[37]=0x5a -w mstu2eth2_2e5a_head.cap –s 0
其中:
-i eth2指定抓哪个网口
ether[KK]是指IP数据包的第KK个字节。
ether[12]=0xff and ether[13]=0x09表示只抓来自MDU的数据包。 Ether[34]和ether[35]为发送端口的16进制表示。 Ether[36]和ether[37]为接收端口的16进制表示。 -s表示抓下完整的RTP包,这样可以分析TS流.
mstu2eth2_2e5a_head.cap为保存抓包结果的文件,会生成在当前目录下。
5.2.4 解码
用WireShark打开结果文件并解码为IP,然后再解码为RTP。方法如下: 随意右键一个数据包: