簡體   English   中英

在Windows上攔截/重定向傳出的HTTP連接

[英]Intercepting / Redirecting outgoing http connections on windows

我想重定向Windows計算機上的傳出http連接(不使用系統代理)。

背景:

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

實驗上我已經使用Windows主機文件成功重定向到localhost,但這是不切實際的,因為我還有其他需要在默認http端口80上偵聽的服務,並且我不想為此設置另一個物理服務器

舊版軟件不使用系統代理,因此像FiddlerCore之類的解決方案將無法工作(不幸的是,因為它很棒!)

我注意到在與Winsock結合使用的類似問題中提到的EasyHook,但是我對低級編程的經驗非常有限,在我踏上漫長而混亂的旅程之前,我想檢查一下我是否在正確的道路上!

因此,從理論上講,是否有可能通過鈎住winsock來攔截和重定向不使用系統代理的出站http通信(最好使用c#中的easyHook)?

一個簡單的是/否答案就可以了,有些推理,甚至更好的文檔都很棒

我已經做過很多次了,所以這絕對有可能。 使用以下步驟開始。

  1. 讓您的程序使用CreateProcess啟動目標應用程序,然后將CREATE_SUSPENDED傳遞給dwCreationFlags參數。 這將啟動目標應用程序,但不會開始執行。
  2. 注入包含您的“蹦床”功能的DLL。
  3. 掛鈎Winsock函數gethostbyname
  4. 在目標進程主線程上調用ResumeThread以開始執行。
  5. 在掛鈎函數中,當它返回指向hostent結構的有效指針時,調用真正的 gethostbyname Winsock函數,更改地址數據以使其指向您的回送設備(localhost)。

根據目標應用程序的工作方式,您可能需要掛鈎其他Winsock函數,但是掛鈎gethostbyname通常對於這種情況就足夠了。

您將需要編寫C ++或C中DLL中的鈎子函數。在這里使用C#可能不是一種選擇,而且它會引入很多依賴關系,這些依賴關系可能導致與目標應用程序發生沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM