以下方法均是基於Wireshark
HTTP流提取
基於HTTP的播放有兩種,一種是HLS,另一種是則是普通的HTTP播放。
HTTP流播放通過GET請求。
1、對於HLS來說,先過濾對應的請求對象(m3u8列表)
follow該請求,根據HLS協議,繼續查找,直到ts請求
過濾ts請求,將ts保存下來。
注意根據ts分片序號,做好文件命名。如有需要,可以在linux上通過cat命令,將分片拼接爲一段完整的流。
2、對於普通HTTP流,直接過濾請求對象(ts),保留下來即可,保存方法和上面一樣。
組播流提取
組播基於UDP,如果是RTP封裝類型,需要解析爲RTP再保存,如果是無RTP封裝,則直接follow保存即可。
1、 RTP封裝
首先過濾出對應的UDP流出來,IP地址可以通過日誌獲取。如果網絡包有加入組播的過程,過濾igmp也可獲取IP地址及端口
follow該UDP流,選中一包,右鍵DecodeAs…選擇RTP
選擇電話–>RTP–>流分析
選擇save–>保存raw數據,將後綴改爲.ts
2、 UDP裸流
UDP裸流提取方法和上面類似,僅是不需要解碼爲RTP,follow完UDP流後,直接保存即可。
RTSP流提取
RTSP流的提取與組播流提取過程類似,但目前基RTSP載流方式爲TCP的情況,還沒有有效的流提取方法,待以後完善(可能需要再借助其他工具)。
RTSP UDP載流方式
分爲RTP分支及UDP裸流的情況,流的保存和組播流保存方法一樣,主要是流IP及端口的獲取。
過濾出RTSP流,可以直接過濾rtsp,但因爲rtsp端口如果不是554的情況,wireshark無法自動識別,所以最好過濾tcp contains “PLAY”
根據日誌的IP請求,follow對應的流,確認是否爲RTSP。
查看setup流程,流的IP和端口可以從前端回覆的Transport:字段獲取,注意:如果PLAY命令回覆的RTP-Info: 字段與setup階段的不一樣,那麼要以RTP-Info:爲準(一般不會)。
一般只要順着PLAY命令後的包,就能找到流,如下圖。後面的提取方式,則和組播流一樣。