幾年前寫的一個wireshark基礎培訓,當時主要是面向技術支持人員,使其在工地現場可以使用wireshark做一些問題的初步分析。
WireShark基礎培訓
什麼是WireShark
WireShark是一個網絡協議分析器。主要作用是捕獲網絡包,顯示包詳細信息。
使用WireShark的目的:
通過各種方法的靈活組合,加上對業務流程的瞭解,可以幫助大家很好的分析、定位問題。
WireShark初步使用
以下以wireshark1.6.1版本爲例說明使用。軟件路徑
\\10.1.2.172\e$\組織標準工作環境\開發工具\wireshark-win32-1.6.1.exe
開始截包
1 打開軟件
2 點擊菜單“Capture”->“Interfaces”。出現如下圖:
3 選擇要進行截包的網絡接口,然後點擊其右側的Start。出現如下圖
注意:當存在多個網卡,或安裝了虛擬機存在虛擬網絡接口,要正確選擇捕獲的網絡接口。
停止捕獲
點擊菜單“Capture”->“Stop” 或 點擊工具欄的按鈕。
保存截包
點擊菜單“File”->“Save As”出現如下框
注意:
這裏有兩個選項:Captured和Displayed。
Captured指捕獲的所有包。
Displayed指過濾後顯示出來的包。
如果Captured包的個數太大,只關心顯示出來的內容,則選擇Displayed。
包過濾
包過濾是過濾出你所關心的包。可以在截包的過程中執行,也可以在停止截包後執行。
操作步驟:
在Filter框中輸入過濾語句,點擊Apply。如下圖
常用的過濾語句
ip.addr==
如:ip.addr==10.14.1.53。意思是隻顯示IP地址爲10.14.1.53的包,包括源地址是10.14.1.53的包,或目的地址是10.14.1.53的包。
ip.src==
如:ip.src==10.14.1.53。意思是隻顯示源地址是10.14.1.53的包,即只顯示10.14.1.53發送的包。
ip.dst==
如:ip.dst==10.14.1.53。意思是隻顯示目的地址是10.14.1.53的包,即只顯示發送到10.14.1.53的包。
udp.port==
tcp.port==
如:udp.port==51390。意思是值顯示發送或接收端口爲51390的包。
類似命令如udp.srcport, udp.dstport, tcp.srcport, tcp.dstport。
rtsp
如在filter框中輸入rtsp,則顯示rtsp協議的包。
rtp
如在filter框中輸入rtp,則顯示rtp協議的包。
tcp contains ” ”
如tcp contains “source”,表示顯示出tcp包且包中內容存在字符串”source”。
同理udp contains “”。
udp contains
如 udp contains 7c:05,表示顯示出udp包且包中內容存在二進制序列7c:05。
同理tcp contains。
注意:
過濾命令可邏輯組合。邏輯組合命令包括
&&,||,!
如ip.addr==10.14.1.53&&!tcp.port==554
表示過濾出ip地址爲10.14.1.53並且tcp源或目的端口不是554的包。
以上只列出工作中常用的過濾命令,更多命令可查看“Expression”中的值(如圖)。
閱讀包內容
包內容
以下對一個包內容進行個簡單的閱讀分析。
選中任何一個包,如下圖。看藍圈內的內容。
如上圖中顯示
Frame,Ethernet對應TCP/IP分層模型中的網路接口層。
網路接口層內包含了IP數據包,IP數據包數據中包含了UDP數據包,UDP數據包中包含了RTP數據包。
展開Frame與Ethernet
這裏可以看到,這個包的總大小爲1514字節。
這個數據包要發送到了物理地址爲44:37:e6:1f:23:3f。這個包從物理地址爲00:09:b6:17:c2:80的機器中發出,這個機器可能是一個路由。
展開Internet Protocol與User Datagram Protocol
這裏可以看到:包數據來源的IP爲10.14.1.53,包數據的目的IP爲10.1.10.64。
包數據的來源端口號爲2030。包數據的目的端口號爲59754。從UserDatagram Protocol中可以知道這個包爲UDP包。
展開RTP包,這裏包括RTP包頭,Payload爲RTP包數據。如下圖
列屬性
以下對各列進行個簡單說明:如下圖
No指包號。從截包開始時計數,每截到一個包,NO+1。
Time指時間。從截包開始時計時。如2.44表示距開始截包過了2.44秒。
Source表示源地址。
Destination表示目的地址。
Protocol表示協議。
Length表示包大小。
Info表示包的一些描述信息。幫助更直觀的看到包內容。
簡易閱讀方法
Follow TCP Stream,FollowUDP Stream
由於通過一個一個的看包的內容,不方便,Wireshark提供了Follow TCP Stream可以幫助更好的閱讀某個TCP交互的所有內容。同理Follow UDP Stream用於幫助更方便的閱讀某個UDP交互內容。
以下以RTSP交互爲例,描述操作步驟。
步驟一:開始截包
步驟二:使用rtsp過濾包
步驟三:選中任意一個包,右鍵菜單,點擊“Follow TCP Stream”。
內容顯示如下圖
通過上圖可以很方便的看出rtsp交互過程的所有內容。
同時可以很清晰地看到此次TCP 交互的所有步驟。
Linux下截包
由於linux下常常是命令行操作,沒有Wireshark這麼直觀的界面工具。但linux下的tcpdump工具能完成與Wireshark同樣的功能。
操作步驟
步驟一:通過SSH登錄linux系統,執行tcpdump命令。
如tcpdump -i eth0 –s 65535 –w 1.cap
表示截eth0接口的包,將包內容保存到根目錄的1.cap文件。
步驟二:等待一定時間,進行截包。
步驟三:ctrl+c停止命令。
步驟四:將1.cap文件拷貝到Windows下用Wireshark打開。
tcpdump常用命令參數解釋
-i指定接口。如-ieth0表示截eth0的包;-i lo表示截本機到本機的包。
-w 指定保存文件。如-w /home/1.cap,表示將截包的內容保存到/home/1.cap
-s 指定包數據截斷大小。指定爲一個足夠大的數防止包內容丟失。
src 表示過濾源IP地址。
dst 表示過濾目標IP地址。
port表示過濾端口。
以上命令參數也可通過and,or,!進行組合。
and表示並,or表示或,!表示非。
例子:
tcpdump -i eth0src 10.1.10.185
tcpdump -i eth0dst 10.1.10.158 and tcp and port! 22
tcpdump -i eth0dst or src 10.1.10.158 and tcp and port! 22
tcpdump -i eth0dst 10.1.10.158 and udp
tcpdump -i eth0tcp and port 554
tcpdump -i eth0-w 1.cap
tcpdump -i lo -w1.cap
tcpdump -s 65535-w /home/1.cap
舉例
DVC心跳
下圖爲DVC心跳原理
常見問題解答
有時接收了RTP包,但在WireShark上看不到RTP包只能看到UDP包,怎麼辦?
答:
選中此UDP包,右鍵菜單中,點擊“Decode As…”。如下圖
點“Apply”。這個操作的意思是將源端口號爲4160的UDP包內容按照RTP協議來分析。
這樣再過濾rtp就能過濾出rtp數據了。
如何查看音視頻丟包率?
答:
由於公司目前的音視頻數據都是RTP包,所以看RTP包的丟包率來反映音視頻數據的丟包率。
操作步驟如下。
點擊菜單的Telephony->RTP->Show All Streams,如下圖
據經驗,當視頻數據丟包率爲1%時就會出現卡。
上圖中出現了兩個RTP流,怎麼判斷哪個是視頻哪個是音頻呢?
答:
判斷方法如下:
步驟一:使用Follow TCP Stream 查看rtsp數據
步驟二:查看DESCRIBE返回的數據。如下圖
從劃線處可以得到
audio對應rtsp://10.14.1.53/1/trackID=0
video對應rtsp://10.14.1.53/1/trackID=1
步驟三:查看SETUP返回的數據,如下圖
劃線處及步驟二結論可以得到以下結論:
播放器客戶端將使用端口54114接收服務器端口2004發送來的audio數據
使用端口54116端口接收服務器端口2006發送來的video數據。
至此,就能知道那個是視頻,按個是音頻了。
Wiresharkwindows下截包時不能截本機發給本機的包,如何才能截到?
答:
方法:將本機路由到網關再路由回來。這樣就能截到了。
操作方法:
在cmd中輸入以下命令:
route add10.1.10.158 mask 255.255.255.255 10.1.10.254
其中10.1.10.158爲本機的IP。10.1.10.254爲網關IP。
有時Portal中的播放器,播放不出來,如何驗證不是播放器的問題?
驗證方法:
用VLC播放,如果VLC能播出來,播放器播不出來,則說明很可能是播放器問題。
以下描述如何用Wireshark查看播放地址。
步驟如下:
步驟一:
打開Wireshark,輸入過濾語句rtsp。這時應該沒有包。
步驟二:
從portal中點出播放器進行播放。Wireshark顯示rtsp包。
如果沒有顯示rtsp包,則要進行其他判斷,這裏不詳述。
步驟三:
對包執行Follow TCP Stream,下圖中的rtsp://10.14.1.201/DD2F4253_A317_AF1D_16C6_0BB485CEE444.sdp即爲播放地址。