本文目的
記錄FiddlerCore怎樣實現如下功能:html
抓取本機的請求響應web
抓取本機局域網內其它設備的請求響應瀏覽器
情景介紹
用C#調用FiddlerCore,開發出軟件,本軟件能夠抓取本機(運行本軟件的電腦)上的http/https請求響應,能夠抓取同一局域網內設備(如本機局域網ip爲192.168.1.2,路由器ip爲192.168.1.1,同一路由器下還鏈接了一部手機,其ip爲192.168.1.3,那麼,這個手機的http/https也是能夠抓取的)。緩存
添加引用
須要的庫文件:
BCMakeCert.dll
CertMaker.dll
FiddlerCore4.dll
服務器
FiddlerCore4.pdb
FiddlerCore4.xml
app
- 1
初始化FiddlerCore
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
實現事件處理
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
啓動、中止
到這裏,程序已經準備好了。如今咱們來啓動它。函數
冷啓動
程序剛運行起來,從未將自身做爲系統代理。這時,只須要調用InitFiddler就好了。this
完全中止
因爲本程序將自身設置爲系統代理了,當本程序退出時,若是你沒有作善後處理,那麼系統代理還在Internet選項——>鏈接——>局域網設置——>代理服務器的設置裏躺着,可因爲你的程序已經退出了,這個系統代理指向的是一個沒有在工做的代理,那麼此路不一樣,你可能會瀏覽器打不開網頁,經過本機代理上網的其餘設備也沒法發起http請求。所以,當你肯定再也不抓取請求的時候,要作善後處理。spa
- 1
關於這個,官方有段建議:
Shuts down the FiddlerCore proxy and disposes it. Note: If there’s any traffic in progress while you’re calling this method, your background threads are likely to blow up with ObjectDisposedExceptions or NullReferenceExceptions. In many cases, you’re better off simply calling oProxy.Detach() and letting the garbage collector clean up when your program exits.
意思是:當你調用這個方法的時候,若是存在任何正在處理的通訊,那麼你的後臺線程頗有可能帶着ObjectDisposedExceptions異常或NullReferenceExceptions異常而崩潰。
在的大多數狀況下,你最好只是簡單地調用一下oProxy.Detach() 而後當你的程序退出時讓GC來處理。
.net
熱啓動、中止
有時候,程序可能須要暫停一下抓取,但並不徹底退出程序,只是暫時不讓它做爲代理了。這時候有兩種方法:
方式一:解綁事件處理函數
- 1
- 2
- 3
- 4
這種方式只是再也不介入請求和響應了,實際上,全部的會話仍是經過本程序的代理走的流量。
方式二:解除系統代理
暫停代理
- 1
- 2
- 3
- 4
- 5
這種方式是將本程序的代理完全解除,當代理解除以後,全部的請求都將再也不走本程序。
當你須要再啓動代理的時候,從新設置一下代理便可:
重設代理
- 1
- 2
- 3
- 4
- 5
終端設置
如今程序已經準備好攔截抓取了,就等着連入請求了。
抓取本機請求
通常狀況下,瀏覽器的代理設置都默認爲使用IE代理設置,若是不是,須要手動設置一下:
代理服務器IP設置爲localhost或127.0.0.1
端口設置爲8888,也就是iStartPort = 8888指定的端口號
抓取非本機請求
這種場景,我只實驗成功了抓取同一局域網內的終端請求。
保證目標終端與代理機處於同一網段
若是你的軟件運行的計算機(咱們稱它爲代理機)鏈接在一臺192.168.1.1的路由器下,那麼你的代理機的局域網IP應該是192.168.1.X,那麼你必需要將要抓取的終端(它能夠是同一局域網內的另外一臺計算機,能夠是經過WiFi上網的手機、iPad等,咱們稱它爲目標終端)經過網線或者WiFi鏈接到同一個路由器下。
下載證書
在目標終端上,打開瀏覽器,輸入網址,格式爲:代理機的局域網IP:代理端口,好比192.168.1.5:8888
這時,會看到一個網頁,這是FiddlerCore生成的一個網頁,提供僞造證書下載的頁面:
Fiddler Echo Service
GET / HTTP/1.1
Host: localhost:8888
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.1.1679095215.1533305166
This page returned a HTTP/200 response
Originating Process Information: 360se:3664
To configure Fiddler as a reverse proxy instead of seeing this page, see Reverse Proxy Setup
You can download the FiddlerRoot certificate
注意這個頁面最下方的You can download the FiddlerRoot certificate帶有一個超連接,這個鏈接就能夠下載僞造的證書。
安裝證書
這個就不說了,不一樣的系統、設備,安裝證書的方法不盡相同,百度一下就知道了。
設置代理
同上,不一樣系統設備的設置方法不盡相同,百度之。
但重要的參數不能填錯:
代理服務器ip就填代理機的IP
代理端口就填你FiddlerApplication.Startup時給的端口,也就是代碼中的iStartPort,8888
真正開始抓取
啓動軟件,打開目標機上的瀏覽器、app等,看看你軟件裏的On_BeforeRequest 和 On_AfterSessionComplete 能幹些啥事吧~
待實現
截至寫本文的時候,我依然沒搞定將Fiddler做爲廣域網代理服務器來抓取來自外網IP的代理數據。而網上有資料說這個功能也是能夠實現的。之後再試驗一下吧。
我想緣由應該是跨請求跨路由器網段了,須要作端口映射、防火牆設置之類的東西吧。固然,只是暫時猜想,真正緣由還有待查明。
項目合做
本人在爬蟲、網頁自動化以及驗證碼識別方面經驗還算豐富,有合適的項目的話,能夠聯繫我 QQ:116703690