思路有了,下面就是來實現它了,在這里,我們采用我們熟悉的C#來實現,C#下有一個完整的WEB DEBUGGER(含代理服務器方式實現的HTTP請求攔截與篡改功能)的實現--Fiddler,Fiddler是一個免費軟件,所以並沒有對源碼進行混淆和加密,反編譯后的代碼可讀性也很好。我們后面的所有代碼,主要就是參考他的代碼來實現,當然他實現的功能非常強大,我們僅僅是演示一下HTTP請求與攔截技術的實現,所以沒有必要完整的去模擬它,故而我們模擬的原則是,手動的一個類一個類一個方法一個方法的進行模擬,在模擬的過程中能簡化的盡量簡化,有些思路不太清楚,或者的確是重復造輪子的部分,就直接使用他的代碼,以后如果有時間,再對其源碼進行一次詳細的分析與研究,這次有些部分我們就不再深究了。
- HTTP代理實現請求報文的攔截與篡改1--開篇
- HTTP代理實現請求報文的攔截與篡改2--功能介紹+源碼下載
- HTTP代理實現請求報文的攔截與篡改3--代碼分析開始
- HTTP代理實現請求報文的攔截與篡改4--從客戶端讀取請求報文並封裝
- HTTP代理實現請求報文的攔截與篡改5--將請求報文轉發至目標服務器
- HTTP代理實現請求報文的攔截與篡改6--從目標服務器接收響應報文並封裝
- HTTP代理實現請求報文的攔截與篡改7--將接收到的響應報文返回給客戶端
- HTTP代理實現請求報文的攔截與篡改8--自動設置及取消代理+源碼下載
- HTTP代理實現請求報文的攔截與篡改8補--自動設置及取消ADSL拔號連接代理+源碼下載
- HTTP代理實現請求報文的攔截與篡改9--實現篡改功能后的演示+源碼下載
- HTTP代理實現請求報文的攔截與篡改10--大結局 篡改部分的代碼分析
首先,我們來實現一個代理服務器,完成HTTP請求的攔截
先來看一看實現后的樣子,這樣有助於理解代碼 。
編譯后的程序,我拷貝了一份放在了附錄的根目錄下的Build文件夾里
在build文件夾里找到這個圖標,雙擊啟動
需要.net framework 4.0 。 沒有的到微軟官網下載
http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
啟動后如圖所示
這時候,我們打開瀏覽器,隨便CHROME,FIREFOX還是IE,然后輸入 www.baidu.com 回車(Enter)
看一下我們的主界面,沒有任何反應,這是正常的,因為我們還沒有設置代理服務器。 :)
任何瀏覽器,都有設置代理服務器的地方,鑒於天朝 IE的使用率,這里講IE里的操作步驟。
打開IE--工具--Internet選項--連接--局域網設置
勾上(跳過本地地址的代理服務器不要勾選),然后點高級
依照上圖進行設置,HTTPS和FTP等不要設置(本代理服務器未對這兩種協議進行處理),IP是127.0.0.1 表示代理服務器是在本機,監聽端口設成8888,目前代碼里寫死了。
在IE里設置完后,我們會發現其它瀏覽器也自動開始使用代理服務器了,這是因為設置代理服務器是系統的功能,每個瀏覽器打開的都是同一個設置代理服務器的程序
看到這里,大家是不是發現了什么問題。我們不是以后每次要攔截的時候,都要手動設置一次代理服務器吧,-_-!!! ,當然,這是不可能的,后面我們將在篡改一節的開始,就實現一個自動設置代理服務器的功能,這樣,當我們的代理服務器啟動的時候,就自動將本機的代理服務器設置成自己,退出的時候,再恢復成原樣,這樣就不再需要向上面一樣手動設置了。
OKAY , 一切就緒了,這時候,再次在瀏覽器里輸入網址: http://www.baidu.com
看下主界面
看左邊,會話已經被監聽到了。我們點第一欄的編號為1的會話,界面如下:
看右邊
先看上面的文本框,這里顯示出了HTTP請求的頭信息。
再看下面的文本框,這里也顯示出了HTTP響應的頭信息。
從這兩張圖里我們可以清楚看到,所有的請求和響應信息都已經被我們監聽到了。
再看一下瀏覽器,網頁也正常的打開了,速度也不是很慢,看來,我們的代理服務器算是正常的運轉起來了 :) 。
附錄(源碼+程序)