【问题标题】: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 BadVPN。它似乎具有与 proxifier 相同的功能,但这是开源的并且在 github 上。

标签: windows process proxy http-proxy


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2018-11-19
      • 2012-01-12
      相关资源
      最近更新 更多