Wireshark在多媒體開發中的使用

咸鱼Jay發表於2024-03-15

一 概要:

Wireshark(前稱Ethereal)是一個網路抓包工具。 是一款非常棒的Unix和Windows上的開源 網路協議分析器。儘可能顯示出最為詳細的網路封包資料。Wireshark使用WinPCAP作為介面,直接與網路卡進行資料包文交換。在多媒體開發中,經常會用到wireshark進行輔助定位,定位的內容一般有碼流正確性確認、碼流回放、網路情況分析、幀率位元速率確認等。
官網下載地址:https://www.wireshark.org/

二 使用步驟:

Wireshark有桌面版和命令列兩種,通常在安卓、嵌入式等平臺使用命令列方式進行抓包,然後在PC環境下進行包的分析

2.1 桌面版

a 開始介面

image

b 選擇網路卡

wireshark是捕獲機器上的某一塊網路卡的網路包,當你的機器上有多塊網路卡的時候,你需要選擇一個網路卡。
image

c 視窗介紹

image

d 填寫過濾條件

image

協議過濾

比如TCP,只顯示TCP協議。
rtsp,只顯示rtsp協議。
udp,只顯示udp協議。
rtp,只顯示rtp協議。
rtmpt,只顯示rtmp協議。
常用的還有sip、h225、h245等

IP過濾

比如 ip.src 192.168.1.102 顯示源地址為192.168.1.102,
ip.dst
192.168.1.102, 目標地址為192.168.1.102
ip.addr=192.168.1.102 表示部分源和目標,所有透過192.168.1.102的包都過濾

埠過濾

tcp.port ==80, tcp埠為80的
tcp.srcport == 80, 只顯示TCP協議的源埠為80的。
tcp.dstport == 80, 只顯示TCP協議的目的埠為80的。
udp.port ==80, UDP埠為80的
udp.srcport == 80, 只顯示UDP協議的源埠為80的。
udp.dstport == 80, 只顯示UDP協議的目的埠為80的。

邏輯運算子為 AND / OR / && / || / !

例如ip.srcxx.xx.xx.xx && udp.port=xxxxx
! ip.src
xx.xx.xx.xx 表示反過濾IP為xx.xx.xx.xx的資料包

e 結果展示

image

2.2 命令列

相對於桌面版本。命令列使用起來更為簡單

image

a 選擇網路卡

可以先用ifconfig\ipconfig命令查詢網路卡xxx ,然後tcpdump –i xxx ,這樣會將抓包結果實時重新整理到抓包介面,如果想將抓包檔案儲存可以使用-w引數tcpdump –i xxx –w /sdcard/xxx.pcap

b 填寫過濾條件

tcpdump ip host xx.xx.xx.xx and ! yy.yy.yy.yy 過濾指定的ip
tcpdump src port xx過濾指定的源埠

三 Wireshark媒體碼流解析:

基於標準rtp的碼流,底層傳輸協議為udp
image
抓到包之後一般會先根據ip或者埠過濾出要分析的資料流,
image

然後將過濾出來的udp轉換成RTP

注意:Wirshark是基於使用者指定的格式去做翻譯的,所以我們指定將udp轉換成RTP時,前提是我們知道這個包確實是RTP碼流,否則wireshark將翻譯出很奇怪的包,該原則同樣適用於將RTP轉成h264或其他格式。
image

Decode as轉碼成h264,有時Wireshark會誤將其他格式的RTP轉成h264,但事實上並不是h264的碼流,正如前邊所說,Wireshark需要使用者告訴他需要解成什麼協議。如果出現解錯的情況,可以透過payload的配置進行糾正。如下:
編輯--首選項--protocols---找到要糾正的協議,填上正確的payload值。
image

四 示例

4.1 Ts流

udp--->decode as---->MP2T將udp流解析成TS流格式,然後可以將tS流中的音影片匯出用播放器播放。

如下圖:電話-->rtp-->流分析-->save-->File synchronized Forward Stream Audio, 此時需要注意,需要把字尾名改成.raw,然後儲存後再將字尾名改成.ts。
image

4.2 流量分析

首先設定過濾條件,將要分析的碼流過濾出來,然後將過濾出來的結果儲存--匯出特定分組,(否則分析的結果會不準),然後開啟新的過濾過的流,點選統計--I/O圖示,會分析出流量曲線,使用者可以調整統計的時間粒度,已達到自己想要統計的目的。

image
image

4.3 影片幀率統計

Wireshark沒有提供直接的幀率統計功能,但是可以透過過濾rtp.marker == 1(依據rtp標準)來將一幀的最後一個包作為過濾條件,也就是一幀的結束,過濾後需要碼流儲存匯出特定分組,然後開啟新的檔案,就可以根據時間值看出一秒鐘有多少幀了。

4.4 丟包,亂序分析

電話—>rtp-流分析
然後可以可以根據序列的一列來確認是否有亂序和丟包。
image

相關文章