了解過網(wǎng)絡(luò)安全技術(shù)的人都知道一個(gè)名詞“抓包”。那對于局外人,一定會(huì)問什么是抓包?考慮到,大家的技術(shù)水平不一,我盡可能用非專業(yè)的口吻簡單的說一下。
抓包就是將網(wǎng)絡(luò)傳輸發(fā)送與接收的數(shù)據(jù)包進(jìn)行截獲、重發(fā)、編輯、轉(zhuǎn)存等操作,也用來檢查網(wǎng)絡(luò)安全。抓包也經(jīng)常被用來進(jìn)行數(shù)據(jù)截取等。黑客常常會(huì)用抓包軟件獲取你非加密的上網(wǎng)數(shù)據(jù),然后通過分析,結(jié)合社會(huì)工程學(xué)進(jìn)行攻擊。所以,學(xué)會(huì)抓包,對于學(xué)好網(wǎng)絡(luò)安全技術(shù)十分重要。

在我們做接口測試的時(shí)候,經(jīng)常需要驗(yàn)證發(fā)送的消息是否正確,或者在出現(xiàn)問題的時(shí)候,查看手機(jī)客戶端發(fā)送給server端的包內(nèi)容是否正確,就需要用到抓包工具。而工程師和程序常用的抓包工具有哪些呢?今天我們就來簡單聊一聊最常用的2種。
Fiddler是在windows上運(yùn)行的程序,專門用來捕獲HTTP,HTTPS的。
wireshark能獲取HTTP,也能獲取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的內(nèi)容。
總結(jié),如果是處理HTTP,HTTPS 還是用Fiddler, 其他協(xié)議比如TCP,UDP 就用wireshark。
一、Fiddler
當(dāng)啟動(dòng)fiddler,程序?qū)?huì)把自己作為一個(gè)代理,所以的http請求在達(dá)到目標(biāo)服務(wù)器之前都會(huì)經(jīng)過fiddler,同樣的,所有的http響應(yīng)都會(huì)在返回客戶端之前流經(jīng)fiddler。
Fiddler可以抓取支持http代理的任意程序的數(shù)據(jù)包,如果要抓取https會(huì)話,要先安裝證書。
Fiddler的工作原理
Fiddler 是以代理web服務(wù)器的形式工作的,它使用代理地址:127.0.0.1, 端口:8888. 當(dāng)Fiddler會(huì)自動(dòng)設(shè)置代理, 退出的時(shí)候它會(huì)自動(dòng)注銷代理,這樣就不會(huì)影響別的程序。不過如果Fiddler非正常退出,這時(shí)候因?yàn)镕iddler沒有自動(dòng)注銷,會(huì)造成網(wǎng)頁無法訪問。解決的辦法是重新啟動(dòng)下Fiddler.


Fiddler 如何捕獲Firefox的會(huì)話
能支持HTTP代理的任意程序的數(shù)據(jù)包都能被Fiddler嗅探到,F(xiàn)iddler的運(yùn)行機(jī)制其實(shí)就是本機(jī)上監(jiān)聽8888端口的HTTP代理。Fiddler2啟動(dòng)的時(shí)候默認(rèn)IE的代理設(shè)為了127.0.0.1:8888,而其他瀏覽器是需要手動(dòng)設(shè)置的,所以將Firefox的代理改為127.0.0.1:8888就可以監(jiān)聽數(shù)據(jù)了。
Firefox 上通過如下步驟設(shè)置代理
點(diǎn)擊: Tools -> Options, 在Options 對話框上點(diǎn)擊Advanced tab - > network tab -> setting.
Firefox 中安裝Fiddler插件
修改Firefox 中的代理比較麻煩, 不用fiddler的時(shí)候還要去掉代理。推薦你在firefox中使用fiddler hook 插件, 這樣你非常方便的使用Fiddler獲取firefox中的request 和response,當(dāng)你安裝fiddler后,就已經(jīng)裝好了Fiddler hook插件,你需要到firefox中去啟用這個(gè)插件打開firefox tools->Add ons -> Extensions 啟動(dòng) FiddlerHook


Fiddler如何捕獲HTTPS會(huì)話
默認(rèn)下,F(xiàn)iddler不會(huì)捕獲HTTPS會(huì)話,需要你設(shè)置下, 打開Fiddler Tool->Fiddler Options->HTTPS tab

選中checkbox, 彈出如下的對話框,點(diǎn)擊"YES"


點(diǎn)擊"Yes" 后,就設(shè)置好了
Fiddler的基本界面
看看Fiddler的基本界面

Inspectors tab下有很多查看Request或者Response的消息。 其中Raw Tab可以查看完整的消息,Headers tab 只查看消息中的header. 如下圖

Fiddler的HTTP統(tǒng)計(jì)視圖
通過陳列出所有的HTTP通信量,F(xiàn)iddler可以很容易的向您展示哪些文件生成了您當(dāng)前請求的頁面。使用Statistics頁簽,用戶可以通過選擇多個(gè)會(huì)話來得來這幾個(gè)會(huì)話的總的信息統(tǒng)計(jì),比如多個(gè)請求和傳輸?shù)淖止?jié)數(shù)。
選擇第一個(gè)請求和最后一個(gè)請求,可獲得整個(gè)頁面加載所消耗的總體時(shí)間。從條形圖表中還可以分別出哪些請求耗時(shí)最多,從而對頁面的訪問進(jìn)行訪問速度優(yōu)化

QuickExec命令行的使用
Fiddler的左下角有一個(gè)命令行工具叫做QuickExec,允許你直接輸入命令。
常見得命令有:
help 打開官方的使用頁面介紹,所有的命令都會(huì)列出來
cls 清屏 (Ctrl+x 也可以清屏)
select 選擇會(huì)話的命令
.png 用來選擇png后綴的圖片
bpu 截獲request

Fiddler中設(shè)置斷點(diǎn)修改Request
Fiddler最強(qiáng)大的功能莫過于設(shè)置斷點(diǎn)了,設(shè)置好斷點(diǎn)后,你可以修改httpRequest 的任何信息包括host, cookie或者表單中的數(shù)據(jù)。設(shè)置斷點(diǎn)有兩種方法
第一種:打開Fiddler 點(diǎn)擊Rules-> Automatic Breakpoint ->Before Requests(這種方法會(huì)中斷所有的會(huì)話)
如何消除命令呢? 點(diǎn)擊Rules-> Automatic Breakpoint ->Disabled
第二種: 在命令行中輸入命令: bpu http://www.baidu.com (這種方法只會(huì)中斷http://www.baidu.com)
如何消除命令呢? 在命令行中輸入命令 bpu

二、Wireshark
Wireshark是另外一種抓包工具,這種工具比fiddler更強(qiáng)大,消息量更多。大家可能會(huì)問:有了fiddler,為什么還要用wireshark呢?這里說下,在測試中,發(fā)現(xiàn)用fiddler抓包,有些包是沒有抓到的,比如在驗(yàn)證反作弊信息的時(shí)候,反作弊pingback信息的消息用fiddler就沒抓到,用wireshark就抓到了。還有另外一種情況,就是在驗(yàn)證cna的時(shí)候,如果先用fiddler抓包,如果沒有種下cna的時(shí)候,以后就永遠(yuǎn)沒有cna了,情況很詭異。解決辦法就是把包卸載了重新安裝,第一次用wireshark抓包。
Wireshark優(yōu)勢:
1、強(qiáng)大的協(xié)議解析能力,一到七層全解碼,一覽無遺,對于協(xié)議細(xì)節(jié)的研究特別有幫助。
2、對于https加密流量,只要將瀏覽器的session key 自動(dòng)導(dǎo)入wireshark,Wireshark可以自動(dòng)解密https流量。
Wireshark不足之處:
盡管可以自定義過濾列表,但為了抓取一個(gè)特定TCP Flow /Session 流量需要寫一個(gè)長長的過濾列表,這對于初學(xué)者很不友好。
操作實(shí)例:
wireshark是捕獲機(jī)器上的某一塊網(wǎng)卡的網(wǎng)絡(luò)包,當(dāng)你的機(jī)器上有多塊網(wǎng)卡的時(shí)候,你需要選擇一個(gè)網(wǎng)卡。

點(diǎn)擊Caputre->Interfaces.. 出現(xiàn)下面對話框,選擇正確的網(wǎng)卡。然后點(diǎn)擊"Start"按鈕, 開始抓包:

一、WireShark 界面

1、Display Filter(顯示過濾器),用于過濾;
2、Packet List Pane(封包列表),顯示捕獲到的封包,有源地址和目標(biāo)地址,端口號;
3、Packet Details Pane(封包詳細(xì)信息), 顯示封包中的字段;
4、Dissector Pane(16進(jìn)制數(shù)據(jù));
5、Miscellanous(地址欄,雜項(xiàng))。
二、Wireshark 顯示過濾
使用過濾是非常重要的,初學(xué)者使用wireshark時(shí),將會(huì)得到大量的冗余信息,在幾千甚至幾萬條記錄中,以至于很難找到自己需要的部分。搞得暈頭轉(zhuǎn)向。過濾器會(huì)幫助我們在大量的數(shù)據(jù)中迅速找到我們需要的信息。
過濾器有兩種:
1、一種是顯示過濾器,就是主界面上那個(gè),用來在捕獲的記錄中找到所需要的記錄
2、一種是捕獲過濾器,用來過濾捕獲的封包,以免捕獲太多的記錄。 在Capture -> Capture Filters 中設(shè)置。
三、保存過濾
在Filter欄上,填好Filter的表達(dá)式后,點(diǎn)擊Save按鈕, 取個(gè)名字。比如"Filter 102",Filter欄上就多了個(gè)"Filter 102" 的按鈕。
四、過濾表達(dá)式的規(guī)則
表達(dá)式規(guī)則
1.協(xié)議過濾 比如TCP,只顯示TCP協(xié)議。
2.IP 過濾
比如 ip.src ==192.168.1.102 顯示源地址為192.168.1.102,ip.dst==192.168.1.102,目標(biāo)地址為192.168.1.102。
3.端口過濾
tcp.port ==80, 端口為80的
tcp.srcport == 80, 只顯示TCP協(xié)議的愿端口為80的。
4.Http模式過濾
http.request.method=="GET", 只顯示HTTP GET方法的。
5.邏輯運(yùn)算符為 AND/ OR
五、封包列表(Packet List Pane)
封包列表的面板中顯示,編號,時(shí)間戳,源地址,目標(biāo)地址,協(xié)議,長度,以及封包信息。 你可以看到不同的協(xié)議用了不同的顏色顯示。 你也可以修改這些顯示顏色的規(guī)則, View ->Coloring Rules.
六、封包詳細(xì)信息 (Packet Details Pane)
這個(gè)面板是我們最重要的,用來查看協(xié)議中的每一個(gè)字段。各行信息分別為
·Frame: 物理層的數(shù)據(jù)幀概況
·Ethernet II: 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息
·Internet Protocol Version 4: 互聯(lián)網(wǎng)層IP包頭部信息
·Transmission Control Protocol: 傳輸層T的數(shù)據(jù)段頭部信息,此處是TCP
·Hypertext Transfer Protocol: 應(yīng)用層的信息,此處是HTTP協(xié)議
七、Wireshark與對應(yīng)的OSI七層模型

八、TCP包的具體內(nèi)容
從下圖可以看到wireshark捕獲到的TCP包中的每個(gè)字段。

總結(jié):
總的來說,兩款抓包軟件各有優(yōu)缺點(diǎn),選擇的關(guān)鍵在于我們的需求是什么,當(dāng)然,對于軟件測試從業(yè)者而言,兩款軟件都是十分有必要學(xué)習(xí)的~
本文的文字及圖片來源于網(wǎng)絡(luò)加上自己的想法,僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問題請及時(shí)聯(lián)系我們以作處理。