Fiddler提供了一個(gè)C#接口,可以充分利用進(jìn)行二次開發(fā)
Fiddler是一款強(qiáng)大的WEB網(wǎng)絡(luò)調(diào)試工具齐邦,可以監(jiān)聽HTTP/HTTPS數(shù)據(jù)流量情況第租,其原理是通過自身建立成一個(gè)HTTP代理服務(wù)器,只需要把你想攔截的內(nèi)容煌妈,通過該HTTP代理就能實(shí)現(xiàn)監(jiān)聽以及修改等強(qiáng)大操作。
Fiddler提供了一個(gè)開發(fā)者接口汰蜘,其全名稱FiddlerCoreAPI;另外也提供了一些簡單的調(diào)用DEMO苛坚。
這次文章就主要來講講怎么去使用易語言調(diào)用色难;
由于易語言是不支持直接調(diào)用C#解釋型代碼,但可以通過VC++去調(diào)用在將VC++封裝成DLL文件實(shí)現(xiàn)易語言進(jìn)行調(diào)用娇昙。但由于考慮到技術(shù)上的難題以及開發(fā)上的效率笤妙,目前在易語言圈子已經(jīng)有人將C#封裝成一個(gè)可以進(jìn)行相互通信的,其名稱叫“奇易模塊”蹲盘,它可以直接使用易語言進(jìn)行載入模塊召衔。
環(huán)境都已經(jīng)集成到了一體,包括證書文件苍凛、相應(yīng)的C#.DLL文件。包括一鍵部署的代碼。
簡單部署一個(gè)易語言的Fiddler環(huán)境:
如圖1.0所示哑蔫,載入模塊后弧呐,在運(yùn)行易語言時(shí)執(zhí)行 快速初始化,這行代碼會直接幫你復(fù)制好部署Fiddler所需要的代碼腥沽,運(yùn)行之后可以直接關(guān)掉易程序鸠蚪,之后全選粘貼师溅,如圖1.1所示
如果是第一次使用Fiddler盾舌,請務(wù)必檢查電腦是否安裝了Fiddler所需的環(huán)境。 FiddlerCoreAPI接口的配置環(huán)境是同樣跟Fiddler工具一模一樣窿锉,需要.NET4環(huán)境以上的支持膝舅; 并在第一次運(yùn)行會直接提示需要安裝SSL證書,以便進(jìn)行HTTPS數(shù)據(jù)流量的解密洼滚。
檢查.NET 4方法可通過兩種方式
方法一:
在左下角開始-控制面板-程序和功能-找到有關(guān)microsoft .net 4以上字樣即可
方法二:
使用奇易模塊自帶的子程序命令《FD_檢測NET環(huán)境》返回真代表環(huán)境已經(jīng)安裝琳轿,假則代表沒有。如圖1.2所示
根據(jù)圖1.1已經(jīng)快速完成了代碼的部署挪哄,那么接下來講解一下他們的每個(gè)數(shù)據(jù)都是如何進(jìn)行獲取琉闪,以及修改等操作。
在圖1.1中斯入,F(xiàn)D_快速初始化 內(nèi)有一個(gè)回調(diào)測試子程序蛀蜜,那么所有的HTTP/HTTPS數(shù)據(jù)流量都會經(jīng)過該子程序中;
通過 《FD_分析FD數(shù)據(jù)》 可以將數(shù)據(jù)現(xiàn)在拆包詳細(xì)分析滴某,其返回值是 Fiddlre數(shù)據(jù)結(jié)構(gòu),我們可以看到數(shù)據(jù)結(jié)構(gòu)中包含如下幾個(gè)參數(shù)户誓。
圖1.3中數(shù)據(jù)類型中包含12個(gè)基本數(shù)據(jù)類型參數(shù)幕侠,我們來一一解釋一下這些參數(shù)記錄的信息:
編號 ? ? ? ? ? ? ? ? ? ?記錄每個(gè)數(shù)據(jù)流量的序號,從0開始往下累積悼潭。
數(shù)據(jù)類型 ? ? ? ? ? ?總會只有2個(gè)參數(shù)值“send”代表該數(shù)據(jù)是由用戶發(fā)出去;“recv”代表是由服務(wù)器返回回來的數(shù)據(jù)漆枚。
網(wǎng)頁地址 ? ? ? ? ? ?該數(shù)據(jù)包的詳細(xì)GET地址抵知,包含參數(shù)。
網(wǎng)頁源碼 ? ? ? ? ? ?僅在“recv”模式下有內(nèi)容刷喜,其內(nèi)容是所監(jiān)聽到具體返回的包(不包含協(xié)議頭)掖疮。
文檔類型 ? ? ? ? ? ?僅在“recv”模式下有效,返回該數(shù)據(jù)的文檔類型(截取自協(xié)議頭)浊闪。
POST參數(shù) ? ? ? ? 僅在“send”且數(shù)據(jù)提交類型是“post”模式下有效,其內(nèi)容是監(jiān)聽到用戶POST發(fā)出的數(shù)據(jù)折汞。
發(fā)送cookies ? ? ?在“send”和“recv”模式下都有效盖腿,但“recv”下返回的也是“send”時(shí)的cookies,其內(nèi)容是用戶發(fā)出的cookie鸟款。
返回cookies ? ? ? 僅在“recv”模式下有效茂卦,其內(nèi)容是協(xié)議頭中返回回來的cookies內(nèi)容。
附加操作碼 ? ? ? ?無任何用處等龙,為了是模塊內(nèi)部的處理機(jī)制。
進(jìn)程信息 ? ? ? ? ? ?顯示的是對應(yīng)獲取到數(shù)據(jù)流量的進(jìn)程名稱霍比。
會話ID ? ? ? ? ? ? ? ?會話ID類似于編號暴备,是來自FiddlerCoreAPI接口內(nèi)所返回的數(shù)據(jù)流量序號们豌,其send返回的recv對應(yīng)1個(gè)序號浅妆。
通過圖1.3所示障癌,我們已經(jīng)知道了,當(dāng)程序運(yùn)行之后康辑,所有的數(shù)據(jù)流量都會經(jīng)過該子程序轿亮,但我們務(wù)必在數(shù)據(jù)處理完成之后,如圖1.1最后一行代碼中使用《FD_回調(diào)》否則C#接口無法接收到回調(diào)信息按咒,造成網(wǎng)頁一直處于等待但骨,卡慢狀態(tài)。
注意:如果需要對監(jiān)聽到的數(shù)據(jù)進(jìn)行處理或者其它性能較高的操作掠抬,建議劃分到線程內(nèi)添坊,因?yàn)檠舆t較高會影響回調(diào)時(shí)間,造成網(wǎng)頁訪問緩慢贬蛙。
下面來實(shí)現(xiàn)一個(gè)簡單的替換字符串的操作,我們嘗試將網(wǎng)頁返回的內(nèi)容包含“hello”數(shù)據(jù)全部將其替換成“wolrd”氛堕,那么野蝇,通過剛才的數(shù)據(jù)參數(shù)介紹,我們知道數(shù)據(jù)包是在數(shù)據(jù)類型等于“recv”模式下锐想,才能獲取到返回回來的網(wǎng)頁源碼乍狐。
那么我們可以按照如圖1.4以下例程操作:
我們看到,首先會使用 如果真 語句進(jìn)行判斷數(shù)據(jù)類型 是否等于“recv”藕帜,如果結(jié)果成立,就代表該數(shù)據(jù)是由服務(wù)器返回的數(shù)據(jù)包贝攒,我們在使用奇易模塊中的子程序命令《FD_HTML_替換》功能时甚,該功能提供3個(gè)參數(shù)(圖1.5):
FD數(shù)據(jù) ? ? ? ? ? ?該參數(shù)主要是識別出需要修改的哪一個(gè)數(shù)據(jù)包塊;只需提供當(dāng)前的Fiddler數(shù)據(jù)類型即可长捧。
源內(nèi)容 ? ? ? ? ? ? ?其替換之前的內(nèi)容吻贿,C#接口會對其進(jìn)行查找并替換。
新內(nèi)容 ? ? ? ? ? ? ?所需要修改后的新內(nèi)容舅列。
通過以上代碼帐要,就能實(shí)現(xiàn)簡單的替換操作,可以直接運(yùn)行看到效果(圖1.6):
我們看到上圖1.6已經(jīng)成功將返回結(jié)果hello替換成了wolrd內(nèi)容奋早。
注意:某些瀏覽器它是可以不需要經(jīng)過IE代理赠橙,我們都知道Fiddler是必須建立在HTTP代理上,所以務(wù)必檢查瀏覽器的配置掉奄。
通過以上奇易模塊的基本使用方式凤薛,大致了解了它的運(yùn)行機(jī)制,且奇易模塊是處于完全開放源代碼的機(jī)制(除FiddlerCoreAPI提供的DLL接口)缤苫。
包括C#封裝的接口完全開源活玲,均可前往:bbs.fiddler.la下載獲取帜矾。
并且奇易模塊目前不僅僅在于FD數(shù)據(jù)監(jiān)聽屑柔,并且支持DOM元素操作(如精易模塊的網(wǎng)頁填表)珍剑。