1. 程式人生 > 其它 >RTMP資料抓包的資料報文解讀

RTMP資料抓包的資料報文解讀

技術標籤:SRSubuntuc++

本文主要記錄一下RTMP資料在tcpdump抓包後的資料分析解讀

一、開啟Tcpdump抓資料

[email protected]:/home/hu# tcpdump -i ens33 -S -c 100 -x  port 1935
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

命令: tcpdump -i ens33 -S -c 100 -x port 1935 ,這裡是抓取埠為1935的RTMP資料流

二、使用VLC拉流後,就已抓取了資料

這裡是一段VLC發給SRS流媒體的資料,一看資料長度是1537,是不是很眼熟呢。這就是c0資料段

c0c1 = new char[1537];
if ((err = io->read_fully(c0c1, 1537, &nsize)) != srs_success)

但是我們來看下面的資料0x0620 + 9 = 1577,這裡為什麼是1577呢

<pre>11:18:13.586142 IP 192.168.1.9.50578 > hu-virtual-machine.1935: Flags [P.], seq 173544423:173545960, ack 68475888, win 4380, length 1537
 0x0000: 4500 0629 69d3 4000 8006 0782 c0a8 0109
 0x0010: c0a8 0120 c592 078f 0a58 13e7 0414 dbf0
 0x0020: 5018 111c 8995 0000 0300 0000 0009 007c
 0x0030: 02f7 7855 1ece ab8e 1e36 2f07 c586 8a70
 
  ......
 
 
 0x05d0: 05af 5283 0bd2 11a5 4888 94cc 0b05 2255
 0x05e0: 0487 11cd 1985 10a9 e943 bf8b 8391 9845
 0x05f0: 5fbd 4107 3005 d303 990b 88d9 b636 56d4
 0x0600: 3cfe c8ed 8374 8f4b 0f0f c512 0216 794b
 0x0610: 22a0 54e5 bc58 abd8 c410 9607 0884 3934
 0x0620: 53ce 5096 94af beab e0

因為這裡抓取的是網絡卡上最原始的資料,是由 IP頭資訊+TCP資訊+RTMP資料組成。20+20+1537 = 1577,正好。

1-20位元組分析(IP頭):

0x0000: 4500 0629 69d3 4000 8006 0782 c0a8 0109
0x0010: c0a8 0120

//IP頭部,總長度20位元組版本 首部長度 + ... +源IP地址 +目的IP地址 ,簡單看看最後4個位元組。

c0a8 0109 = 192 168 1 9 //VLC客戶端ip,就是0xc0=192 0xa8=168 0x01=1 0x09=9

c0a8 0120 = 192 168 1 32 //SRS 伺服器ip

21-40位元組分析(TCP頭):

c592 078f 0a58 13e7 0414 dbf0

0x0020: 5018 111c 8995 0000

源埠號: c592 = 50578

目標端號: 078f = 1935

seq號: 0a58 13ef =173544423

ack號: 0414 dbf0 =68475888

0x50 = 0101 0000 資料包忽略

111c = 4380 //winsize

8995 //校驗和

41-1577位元組(RTMP資料):

0300 0000 0009 007c
0x0030: 02f7 7855 1ece ab8e 1e36 2f07 c586 8a70

......

03 : RTMP包的版本號 In C0, this field identifies the RTMP version requested by the client

說明這是RTMP包的開始,後面就是RTMP包的 handshake_with_client 部分的互動資料C0了。