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

Posted

技术标签:

【中文标题】如何强制特定进程使用代理进行网络通信【英文标题】:How to force a specific process to use a proxy for network communication 【发布时间】:2016-04-10 19:05:27 【问题描述】:

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

我只能找到更改 windows 全局代理的函数。但是有些程序并不关心全局代理说什么,他们总是尝试直接连接,即使不可能……

【问题讨论】:

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

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 一起引入的。

【讨论】:

Proxifier 效果很好。谢谢!这正是我所需要的。【参考方案2】:

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

【讨论】:

【参考方案3】:

执行此操作的现代方法是使用 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 允许开发人员编写与 发生在网络中多个层的数据包处理 操作系统堆栈。 网络数据可以过滤,也可以 在到达目的地之前进行修改。

【讨论】:

以上是关于如何强制特定进程使用代理进行网络通信的主要内容,如果未能解决你的问题,请参考以下文章

网络营销可以用哪些工具?利用黑洞代理加快进程

获取华为OID

如何在 Anylogic 中创建与特定代理的连接并为代理显示动画连接

如何让安卓手机强制4G网络模式

大疆面试整理

全局代理和局部代理的区别?