2016-01-06 328 views
8

有幾個程序可以強制exe使用代理,如Proxifier。還有一些其他的。但這些網站都顯得有點陰暗。我甚至不相信Proxifier tbh ...所以我想知道這些程序是如何工作的。他們是如何做到的呢?有沒有一個WinAPI函數可以用來做到這一點?或者你是否必須實際注入代碼到流程中?如何強制特定進程使用代理進行網絡通信

我只能找到函數來更改Windows的全局代理。但是,有些程序不關心全局代理說什麼,他們總是試圖直接連接,即使這是不可能的......

+0

我*想*你會使用NDIS過濾器驅動程序這種事情。但我對這項技術並不熟悉。 –

+0

我知道wireshark使用一些適用於驅動程序級別的技術。它能夠捕獲我PC上的所有網絡流量,但它太低級別以至於無法知道哪個進程發送了哪個數據包。所以我認爲你的建議是行不通的。 – Forivin

+0

爲什麼你需要知道哪個進程發送了一個包? (但是我懷疑如果需要的話,你可以;數據包的源端口不會唯一標識它來自哪個進程?) –

回答

0

我想是的Wininet.dll從用戶模式程序在Windows上訪問HTTP規範的方法。 (Windows網絡和互聯網支持的文檔是here。我不想瀏覽所有的文檔,但我很確定Wininet.dll是正確的)

一個方法用於執行每個進程代理,就是編寫一個類似Wininet.dll的DLL(並且位於Windows的Wininet.dll之上)。您的Wininet會有某種機制(註冊表,配置文件等)來確定某個特定進程是否需要進行代理。如果進程沒有被代理,那麼所有的調用都會通過原始的Wininet,但是如果進程被代理,那麼你的Wininet會執行重定向。

另一個,有些類似,注入點是在Winsock層(ws2_32.dll中)。 (回到Windows 3.1,Win95時代,TCP/IP協議棧的供應商替換winsock.dll(ws2_32前身)相當常見。)Here's這是一個使用相同概念捕獲winsock層流量的情況。鏈接中的文章有一個很好的圖表,說明了替換ws2_32.dll的概念以及實現細節。

1

Proxifier是基於LSP (layered service provider),但我個人從來不喜歡往往因爲穩定性問題,這種技術。但是,除了LSP之外,還有其他可能的方法可以實現相同的功能,您可以在這裏找到一個簡短的網絡過濾方法(包括LSP)的覆蓋範圍:https://www.ntkernel.com/ndis-hooking-drivers-and-legacy-windows-systems/,但是文檔稍微過時了,我寫了它在早期的Windows XP黎明時期並不包括取代TDI的WFP(Windows Filtering Platform)和取代NDIS Intermediate和NDIS掛鉤驅動程序的NDIS Lightweight Filter。這兩種技術都是由Windows Vista以及NDIS 6.0引入的。

相關問題