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