如何强制特定进程使用代理进行网络通信

时间:2016-01-06 16:00:18

标签: windows process proxy http-proxy

有一些程序如Proxifier可以强制exe使用代理。还有其他几个。但这些网站看起来都有些阴暗。我甚至不相信Proxifier ...所以我想知道这些程序是如何工作的。他们是如何做到的呢?是否有可用于执行此操作的WinAPI函数?或者您是否必须实际将代码注入流程?

我只能找到更改Windows全局代理的函数。但有些程序并不关心全球代理所说的内容,他们总是试图直接联系,即使它不可能......

3 个答案:

答案 0 :(得分:3)

Proxifier基于LSP (layered service provider),但我个人从不喜欢这项技术,因为通常存在稳定性问题。但是,除了LSP之外还有其他适合实现相同功能的方法,你可以在这里找到网络过滤方法(包括LSP)的简短报道:https://www.ntkernel.com/ndis-hooking-drivers-and-legacy-windows-systems/,但是文档有点过时了我在早期的Windows XP曙光中写过它并没有涵盖取代TDI的WFP(Windows过滤平台)和取代NDIS中级和NDIS挂钩驱动程序的NDIS轻量级过滤器。这两种技术都是由Windows Vista和NDIS 6.0引入的。

答案 1 :(得分:1)

我认为Wininet.dll是从Windows上的用户模式程序访问HTTP的规范方法。 (Windows网络和Internet支持的文档是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的概念和实现细节。

答案 2 :(得分:0)

执行此操作的现代方法是使用Windows筛选平台。

https://en.wikipedia.org/wiki/Windows_Filtering_Platform

https://docs.microsoft.com/en-us/windows/win32/fwp/windows-filtering-platform-start-page

  

Windows筛选平台(WFP)是一组API和系统服务   提供了用于创建网络过滤应用程序的平台。   WFP API允许开发人员编写与   分组处理在网络中的多个层进行   操作系统堆栈。 可以过滤网络数据,也可以   在到达目的地之前进行了修改。