2013-06-03 41 views
0

我正在尋找在Windows機器上重定向傳出http連接(不使用系統代理)。在窗口上攔截/重定向傳出http連接

背景:

我與現已解散的Web服務交互的一些舊的軟件。我在一個簡單的桌面應用程序中模擬了該服務,並且希望將傳出的http請求重新路由到此應用程序。

實驗中我已經使用Windows主機文件重定向到本地主機成功,但這是不切實際的,因爲我有其他服務,需要監聽默認http端口80,我不想爲此設置另一個物理服務器

舊版軟件不使用系統代理,所以像FiddlerCore解決方案不會工作(不幸的是,因爲這是真棒!)

我注意到EasyHook在類似的問題中的Winsock一起提及,但我的experiance更低層次的節目是非常有限的,在我踏上漫長而迷茫的旅程之前,我想檢查一下我是否走上了正確的道路!

因此,理論上可以通過掛鉤winsock(最好在c#中使用easyHook)攔截並重定向不使用系統代理的傳出http流量?

一個簡單的是/否的答案將被罰款,

回答

1

我已經做了很多次,所以它是絕對有可能的一些推理,甚至更好的文檔將是非常美妙。使用以下步驟開始。

  1. 讓你的程序啓動目標應用程序與CreateProcess並通過CREATE_SUSPENDEDdwCreationFlags說法。這將啓動目標應用程序,但不會開始執行。
  2. 注入包含您的「蹦牀」功能的DLL。
  3. 掛鉤Winsock功能gethostbyname
  4. 在目標進程主線程上調用ResumeThread開始執行。
  5. 在你的鉤子函數中調用realgethostbyname Winsock函數當它返回一個指向hostent結構的有效指針時,改變地址數據使它指向你的環回設備(localhost)。

根據目標應用程序的工作方式,您可能需要掛鉤其他Winsock函數,但掛鉤gethostbyname通常已足夠用於此方案。

您將需要用C++或C編寫DLL中的鉤子函數。使用C#在這裏可能不是一個選項,而且它會引入很多可能導致與目標應用程序發生衝突的依賴關係。

+0

謝謝,對不起,我花了這麼長的時間來接受這個問題,結束了另一個項目 – Steve