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

Windows 如何强制特定进程使用代理进行网络通信,windows,process,proxy,http-proxy,Windows,Process,Proxy,Http Proxy,有一些类似的程序可以强制exe使用代理。还有一些其他的。但这些网站看起来都有点阴暗。我甚至不相信代理tbh。。。所以我想知道这些程序是如何工作的。他们是怎么做到的?是否有一个WinAPI函数可以用来实现这一点?或者您必须将代码注入到流程中吗 我只能找到更改windows全局代理的函数。但有些程序不在乎全球代理说什么,他们总是试图直接连接,即使这是不可能的 我认为Wininet.dll是从Windows上的用户模式程序访问HTTP的标准方法。(关于Windows网络和Internet支持的文档是。

有一些类似的程序可以强制exe使用代理。还有一些其他的。但这些网站看起来都有点阴暗。我甚至不相信代理tbh。。。所以我想知道这些程序是如何工作的。他们是怎么做到的?是否有一个WinAPI函数可以用来实现这一点?或者您必须将代码注入到流程中吗


我只能找到更改windows全局代理的函数。但有些程序不在乎全球代理说什么,他们总是试图直接连接,即使这是不可能的

我认为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的概念和实现细节。

Proxifier基于此,但就我个人而言,我从不喜欢这种技术,因为它经常存在稳定性问题。但是,除了LSP之外,还有其他适合实现相同功能的可能方法,您可以在此处找到网络过滤方法(包括LSP)的简短介绍:,但是该文档有点过时,我在早期Windows XP dawn编写过,它不包括WFP(Windows过滤平台),它取代了TDI和NDIS轻型过滤器,取代了NDIS中级和NDIS挂钩驱动器。这两种技术都是Windows Vista与NDIS 6.0一起引入的。

实现这一点的现代方法是使用Windows过滤平台

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


我想你会使用NDIS过滤器驱动程序来做这类事情。但我对这项技术不熟悉。我知道wireshark使用了一些在驱动程序级别工作的技术。它能够捕获我电脑上的所有网络流量,但它的级别太低,无法知道哪个进程发送了哪个数据包。所以我认为你的建议行不通。为什么你需要知道哪个进程发送了数据包?(但我怀疑,如果需要的话,您可以;数据包的源端口不是唯一地标识它来自的进程吗?)这很重要,因为我如何通过代理强制单个进程通信?我的意思是,我没有要求让整个系统使用代理。我真的很喜欢通过端口标识进程的想法,我以前没有考虑过。如果您无法使用两个代理(可能有各种各样的问题),请查看BadVPN。它似乎与proxifier具有相同的功能,但这是开源的,并且是在github上实现的。谢谢这正是我需要的东西。