图解用Wireshark进行Http协议分析
一 安裝WireShark
??? 安裝完成后,運行,如果出現NPF未運行的提示,如下圖;說明可能是裝的時候WinPcap未裝上;一般安裝Wireshark會同時自動安裝Winpcap;
?
?
如果裝了Winpcap,在C:\Windows\System32\drivers下,會出現npf.sys;另外系統帶有npfs.sys,不是一個東西;
?
如果是npf服務未運行,在命令行執行net start npf啟動服務。
?
從菜單中查看一下可用的連接,本機用網卡進行的本地連接,只有一個連接,不同的配置,或者無線連接,此處可能會出現多個連接;
?
從菜單看一下捕獲選項,Capture Filter按鈕后的文本框為空,沒有捕獲過濾器;可以設置了過濾器再捕獲,也可以先捕獲,再過濾;此處采用后者;
?
二 進行捕獲分析
點擊前面有個綠色標志的Start按鈕開始捕獲;
?
捕獲一小會點紅色停止按鈕停止;不到一分鐘,已經有600多個包;當前本機正在上網,打開了多個網頁;
?
在過濾表達式框中輸入 http,只查看http協議的包,如下圖; 由于所有打開的網頁都停止刷新好長時間了,http協議的包只有兩個;
?
這兩個包是本機和117.79.93.218之間交互的,百度一下此IP,如下圖;這個應該是百度的IP;
上述的一個包是 http ?200;?
這表示服務器已成功處理了請求。通常,這表示服務器提供了請求的網頁。
?
GET /socket.io/1/xhr-polling/g6BvKEWe5k1WjFgt595_?t=1427092879908
這一段是握手后的socket.io的請求;表明瀏覽器已經使用了新的HTML 5的websocket技術;
?
查看一下本機的IP,網關,DNS等參數;控制面板-網絡和共享中心-本地連接-詳細信息,顯示如下圖的本機IP配置信息;
?
上圖顯示本機連接的網關是192.168.1.254, 在過濾表達式框輸入表達式查看包含此IP的包,一個也無;
?
但是卻有大量的本機和192.168.1.250之間交互的包;應該是網管用某種方法把192.168.1.250映射為了192.168.1.254;這是網管干的,不是我干的;
以后的包中出現192.168.1.250,就是網關了;在此處來說,就是路由器;單位內部的電腦通過此路由器上網;
?
下面來找一下TCP建立連接的三握手過程;
輸入tcp.flags.syn==1或tcp.flags.syn==0x02 過濾一下;這兩個表達式結果是一樣的;結果如下圖;
?
單個的一個SYN,它表示的是建立連接;?SYN和ACK同時為1,它表示的就是建立連接之后的響應;
下圖中顯示有三個TCP連接在建立;
?
看一下第二個連接,其包號為195;列出包號為195、196、197的三個包看一下,其內容為:
SYN
SYN+ACK
ACK
果然這是一個TCP連接的建立過程;前兩個上面說了,第三個 ACK 是第三次握手的確認;到此一個TCP連接建立了;之后才可以進行HTTP協議的收發;HTTP是建立在TCP基礎之上的;
?
三 重新捕獲一次再分析
? ? 關閉所有打開的網頁;再打開瀏覽器;此次自動打開的是搜狗首頁,然后在搜狗首頁輸入 軟件工程 四個字,點擊搜索;
再捕獲一次,然后停止再分析;
輸入如下圖的表達式,去除掉 ip中包含本機IP和192.168.1.250的包,看下有些什么;發現有很多廣播包;這個是底層的ARP協議;ARP在TCP之下一層;
?
? ? ?另外還有很多SSDP包;SSDP ,簡單服務發現協議 ;NOTIFY * HTTP/1.1/r/n,就說明這個SSDP消息是個通知消息;
?
百度一下百度的IP,果然能查到;
?
網頁上還顯示有一種叫IP數據庫的東西;看來里面包括了大量的IP信息;
?
下面顯示捕獲的包對106.120.151.162獲取圖片;
?
用下面網頁查一下106.120.151.162
? ? 原來這個正是搜狗的首頁;?
?
寫個復雜點的過濾表達式;
!arp and !udp and !(ip.src==192.168.1.134 and ip.dst==192.168.1.250) and !(ip.src==192.168.1.250 and ip.dst==192.168.1.134) ?and (http) and (http.request.method=="GET") 看下過濾的結果;
以上表達式的含義是:去除arp, 去除udp,去除?192.168.1.134 and 192.168.1.250 之間互發的包,再取http的請求方法為GET的包;
?由下圖可以看到,對搜狗進行了很多的GET,js腳本,圖片等等,是在不同的http包中傳過來的;
?
下面來做個難一點的;由于前面輸入了 軟件工程 四個字進行搜索,找找捕獲的包中,包含 軟件工程 四個字的包;
在上述的長過濾表達式尾部再補上?and (http contains "軟件工程");沒有定位到一個包;表達式包含中文,會不會有問題;
向搜狗發送的URL大致是下面形式,
http://www.sogou.com/sie?hdq=Af71016-4553&query=軟件工程&p=50040111&oq=&ri=-2
輸入 http contains "query=",即查找http請求字符串中包含 query= 的包;定位到3198號包;如下圖;
這個是服務器返回成功的http 200包;
?
細致一點,再單獨輸入?http contains "軟件工程" 查詢,這次定位到一個包,如下圖;3615號包;
?
觀察窗格的下部,捕獲到的二進制數據和對應的字符串內容;00e0 行顯示,query= 的后面,是......,并不是 軟件工程 四個字;當然由字符串內容可知,這肯定是一個發送帶查詢參數的URL的包;
因為網頁查詢參數是UTF-8編碼的;下面從網上找到 軟件工程 四個字的UTF-8編碼;再對比00e0行的16進制數;
?
? ?
? ? 如上圖;程 字的UTF-8編碼為e7 a8 8b,正是 該行的最后三個16進制數;再比對;由圖可見四個字都對上,該行的后12字節 正是 軟件工程四個字。那么,65 72 79 3d 就是 ery= 的編碼了。
? ? 分析到此結束;我捕獲的包可以下載分析;
http://pan.baidu.com/s/1i3ioQWH
也可以自己捕獲包分析。
?
總結
以上是生活随笔為你收集整理的图解用Wireshark进行Http协议分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spire.XLS试用手记
- 下一篇: 详细图解JDK+Tomcat Web开发