WireShark抓包工具使用

WireShark是一款網絡封包分析軟件,它抓取網絡封包,並儘量顯示出最詳細的封包資料。html

wireshark的準備工做

安裝wireshark

sudo apt-get install wireshark

在non-root下使用wireshark

因爲sudo下使用wireshark太過aggressive,全部須要解決wireshark普通權限下訪問網卡的問題。linux

1.添加wireshark用戶組ubuntu

sudo groupadd wiresharkcentos

2.將dumpcap更改成wireshark用戶組瀏覽器

sudo chgrp wireshark /usr/bin/dumpcap服務器

3.讓wireshark用戶組有root權限使用dumpcap網絡

sudo chmod 4755 /usr/bin/dumpcap工具

4.將須要使用的用戶名yourname加入wireshark用戶組學習

sudo gpasswd -a yourname wireshark 網站

參考資料:http://www.cnblogs.com/ddtpower/archive/2012/12/20/ubuntu_wireshark_dumpcap.html

開始抓包

打開wireshark軟件:

wireshark &

image

過濾器設置

wireshark過濾語法總結:http://blog.csdn.net/cumirror/article/details/7054496

wireshark有兩種顧慮器,捕捉過濾器(Capture Filters)和顯示過濾器(Dispaly Filters)。

配置帶抓取網絡接口,Capture Filter設置爲只抓取主機和10.41.71.8之間的網絡封包:

host 10.41.70.8
等價於src or dst host 10.41.70.8

image

顯示過濾器設置:

image

分析抓取的網封包

參考資料:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html,感謝TankXiao。

從上到下依次是:

1. Main Toolbar(工具欄),一系列工具按鈕。

2. Display Filter(顯示過濾器),  用於過濾

3. Packet List Pane(封包列表), 顯示捕獲到的封包, 有源地址和目標地址,端口號。 顏色不一樣,表明

4. Packet Details Pane(封包詳細信息), 顯示封包中的字段

5. Dissector Pane(16進制數據)

6. Miscellanous(地址欄,雜項)

image

封包詳細信息與OSI對應

TCP三次握手

TCP包和協議中TCP報文格式對應:

TCP三次握手:

打開wireshark, 打開瀏覽器輸入 http://www.cnblogs.com/tankxiao

在wireshark中輸入http過濾, 而後選中GET /tankxiao HTTP/1.1的那條記錄,右鍵而後點擊"Follow TCP Stream",

這樣作的目的是爲了獲得與瀏覽器打開網站相關的數據包,將獲得以下圖

圖中能夠看到wireshark截獲到了三次握手的三個數據包。第四個包纔是HTTP的, 這說明HTTP的確是使用TCP創建鏈接的。

第一次握手數據包

客戶端發送一個TCP,標誌位爲SYN,序列號爲0, 表明客戶端請求創建鏈接。 以下圖

第二次握手的數據包

服務器發回確認包, 標誌位爲 SYN,ACK. 將確認序號(Acknowledgement Number)設置爲客戶的I S N加1以.即0+1=1, 以下圖

第三次握手的數據包

客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方.而且在數據段放寫ISN的+1, 以下圖:

就這樣經過了TCP三次握手,創建了鏈接。

彩蛋

若是協議使用的端口號不規範,好比https使用34128怎麼辦?

參考文檔:《協議的分用以及wireshark對協議的識別

在TCP/IP詳解一書中談到了協議的分用,書中的圖1-8如上。圖1-8能夠很好地解釋在互聯網的分層結構中,底層的協議頭是如何承載上層的不一樣的協議的。對於鏈路層而言,以太網首部中有不一樣幀類型用於表示以太網幀內的數據。在IP數據包的首部,也有專門的8位協議類型,用於表示IP包中的上層協議類型,網址http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml中給出了IETF規定的詳細的協議類型號,其中TCP是6,UDP是17,ICMP是1。不過在傳輸層的兩個經常使用協議TCP和UDP首部中,並無協議類型的字段,TCP和UDP包內的應用程協議的類型依靠的是TCP和UDP包首部的端口號來進行區分。對於一些經常使用的應用層協議IETF都規定了相應的熟知端口號,在網址http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml中有一份詳細的列表。TCP和UDP報頭的16比特端口號給應用層協議的設計提供了足夠的設計空間(65535個)和足夠的靈活度。

查詢網址可知https的端口號對應:

image

理解了協議的分用以後,就比較容易理解wireshark是如何將數據包識別和展現出來的了。wireshark的工做原理的簡單介紹能夠參見http://gaia.cs.umass.edu/wireshark-labs/Wireshark_Intro_v6.0.pdf。歸納地說,就是wireshark是一款創建在已有的包捕捉工具上的一款數據包分析軟件。常見的抓包的庫有libpcap、jpcap、winpcap等等,這些抓包工具將主機的網卡設置爲混雜模式,從而能夠捕捉到目的MAC不是主機網卡的數據包。而wireshark基於這些庫捕捉到的包進行識別和分析,將包中內容按照協議類型和層次展現出來。

  不過對於那些不採用熟知端口傳輸的應用層協議而言,wireshark就有可能出現沒法識別的狀況,這也是我最近遇到的一個場景。我在抓包的時候碰見了wireshark protocol一欄顯示enttec,Info 一欄顯示 unknown的狀況。通過一段時間的分析,能夠肯定wireshark顯示enttec和unknown的緣由是TCP採用了非熟知端口發送HTTP報文。不過wireshark在設計中已經考慮到這樣一種狀況的出現,能夠針對非熟知端口的已知應用層協議設置相應的解碼方式。具體的方法是:選中沒法識別的報文->右鍵單擊->Decode As->選擇相應的應用層協議。

WireShark識別應用層協議的依據是端口號!!!

背景:使用20001端口進行https握手和傳輸。

抓包後看到的結果是這樣的,顯示的都是TCP。這種應該就是沒有找到對應的應用層協議。可是下面的明明應該是https握手和傳輸。能夠看出此時進行傳輸的端口號是34128.

image

在34124端口數據上右擊,選擇Decode As…->Transport,將34128<->80之間的TCP傳輸當成SSL協議。

image

再看看wireshark顯示,能夠看到相關的TLSv1.2的握手和傳輸都已經正確顯示了。

image

 

 

參考資料

Wireshark基本介紹和學習TCP三次握手:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

Fiddler-http檢測調試工具:http://www.cnblogs.com/dasn/p/3716726.html

WEB/HTTP 調試利器 Fiddler 的一些技巧分享:http://www.open-open.com/lib/view/open1375954572906.html

Http調試工具-Fiddler使用指引:http://www.javashuo.com/article/p-cjgywgsp-gb.html

用Wireshark簡單分析HTTPS傳輸過程-抓包過程:http://www.myhack58.com/Article/60/63/2014/51156.htm

利用Fiddler對Android https請求進行監測:http://www.linuxidc.com/Linux/2014-02/97024.htm

爲何Wireshark沒法解密HTTPS數據:https://www.centos.bz/2015/12/why-wireshark-can-not-decrypt-https-data/

相關文章
相關標籤/搜索