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

For*_*vin 10 windows proxy process http-proxy

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

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

vad*_*dim 5

Proxifier 基于LSP(分层服务提供者),但我个人从不喜欢这种技术,因为经常出现稳定性问题。但是,除了 LSP 之外,还有其他适合实现相同功能的方法,您可以在此处找到对网络过滤方法(包括 LSP)的简短介绍:https : //www.ntkernel.com/ndis-hooking-drivers-and- legacy-windows-systems/,但是该文档有点过时,我是在 Windows XP 黎明早期编写的,它不包括取代 TDI 和 NDIS Lightweight 的 WFP(Windows 过滤平台)过滤器,它取代了 NDIS 中间和 NDIS 挂钩驱动程序。Windows Vista 和 NDIS 6.0 引入了这两种技术。


Χpẘ*_*Χpẘ 2

我认为 Wininet.dll 是在 Windows 上从用户模式程序访问 HTTP 的规范方法。(Windows 网络和 Internet 支持的文档位于此处。我不想浏览所有文档,但我很确定 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 的前身)是相当常见的。)下面是使用相同概念在winsock 层捕获流量的情况。链接中的文章有一个很好的图表,说明了替换 ws2_32.dll 的概念和实现细节。