该工具为终端服务(Terminal Services,或远程桌面服务 Remote Desktop Services)和 Citrix(XenApp/XenDesktop)增加了 SOCKS 代理能力。 它利用动态虚拟通道(Dynamic Virtual Channel),使我们能够通过已建立的 RDP/Citrix 连接进行通信,而无需在防火墙上打开新的套接字、连接或端口。
你需要在用于连接 RDP/Citrix 服务器的客户端计算机上安装一个插件(.dll)。在 RDP/Citrix 服务器端,你需要使用该项目的另一半,即 .exe,它负责在插件与服务器可执行文件之间建立通道。 更多细节见下文。如果你想将其与 Citrix/XenApp/XenDesktop 一起使用,请滚动到 Citrix 部分。
如果 DLL 已正确注册,那么每次启动 mstsc.exe(远程桌面客户端)或 Citrix Receiver 时,它都会被加载。当服务器端可执行文件运行时,它会通过动态虚拟通道(远程桌面协议的一项功能)连接回 DLL。通道建立后,SOCKS 代理将在客户端计算机上启动,默认监听 127.0.0.1:1080。该服务可被任何浏览器或工具用作 SOCKS5 代理。
动态虚拟通道是在 Window Server 2008 和 Windows Vista SP1 中引入的。这些版本及任何更新的版本应该都可以正常使用。 目前客户端可与 mstsc.exe(远程桌面客户端)配合使用。如果你想在 Unix 上使用,可以试试 FreeRDP,它在本工具发布前后也发布了类似模块。 Citrix 支持与 Microsoft 相同的底层 API,虽然不确定其引入时间,但肯定在 2013 年之前,因此该插件应可用于大多数 Citrix 解决方案。
你可以获取整个项目自行编译,也可以直接使用 Releases 部分 中编译好的二进制文件。在所有情况下使用正确的二进制文件都很重要,请为相应架构选择正确的文件(如果你的客户端是 32 位而服务器是 64 位,则获取 32 位 dll 和 64 位 exe)。 .dll 需要放置在客户端计算机的任意目录中(如需长期使用,建议将其复制到 %SYSROOT%\system32\ 或 %SYSROOT%\SysWoW64\),然后以提升权限的用户(即管理员)身份执行以下命令进行安装:
regsvr32.exe SocksOverRDP-Plugin.dll
如果你的用户不是管理员,还需要在你的用户下导入注册表设置。请使用 SocksOverRDP-Plugin.reg 文件完成此操作。
如果你希望卸载:
regsvr32.exe /u SocksOverRDP-Plugin.dll
从现在起,每次连接到 RDP 服务器时,该插件都将被加载,并按照注册表中的指定进行配置(见下文)。
.exe 需要复制到服务器上,并可由任何用户执行。
该工具可与用于连接 Citrix 服务器的 Citrix Receiver 配合使用。无论是向用户提供应用还是完整桌面,只要插件安装正确,并且 .exe 服务端组件已复制到 Citrix 服务器并执行,该工具在两种情况下都能正常工作。 Citrix 似乎只有 32 位的 Citrix Receiver。 这意味着如果你的操作系统是 64 位,并且已经注册了相应的 .dll,你需要先注销该 .dll,再使用 32 位版本。如果你使用 32 位操作系统,只需按上述方法注册 .dll 即可。 请注意,64 位 Windows 有两个 regsvr32.exe,一个位于 *%WINDIR%\system32*(x64),一个位于 *%WINDIR%\SysWOW64*(x32),请使用后者注册 32 位 .dll,Citrix Receiver 启动时会自动加载它。其他一切都应相同,请在 Github 上提 issue 之前确保你已阅读本 readme。
服务器组件(.exe)不需要任何配置,也不需要任何参数。不过有一个用于详细输出的参数:
PS C:\Users\SocksOverRDP\> .\SocksOverRDP-Server.exe -h
Socks Over RDP by Balazs Bucsay [[@xoreipeip]]
Usage: SocksOverRDP-Server.exe [-v]
-h This help
-v Verbose Mode
客户端组件(.dll)带有预设设置,该设置在 .dll 注册时由 .dll 本身安装,或者需要从 SocksOverRDP-Plugin.reg 导入。
客户端 .dll 从注册表读取所有选项,相关值可在以下键下找到:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\SocksOverRDP-Plugin
每次模块被启用时,在连接建立之前都会显示一个提醒警告。就像这样:

此警告确保用户知道插件已被加载以及使用的是什么设置。
如果插件无法加载或可执行文件因缺少某些 DLL(例如 VCRUNTIME140.DLL)而无法运行,你可能需要安装 Visual C++ Redistributable for Visual Studio 2015 包。
已在 Windows 11 ARM64 上测试:Redistributable
在 Windows 11 ARM64(Macbook Pro M1)上,安装时会显示以下错误消息:
The module SocksOverRDP-Plugin.dll was located bt the call to DllRegisterServer failed with error code 0x8002801c
尽管显示了此错误,但模块已正确安装并可使用。
服务器组件(.exe)可由任何用户执行,即使是低权限用户也可以使用,该组件不存在任何安全风险。
客户端组件(.dll)默认配置为仅监听 localhost,如果将其更改为例如 0.0.0.0,并且没有防火墙或防火墙配置错误,则可能导致安全问题,因为网络上的其他计算机可以访问 SOCKS 代理并通过 RDP 服务器进行通信。
请注意,SOCKS 服务器仅在 RDP/Citrix 连接保持存活且服务器上可执行文件正在运行时才会启动。
要阻止用户使用此工具,目前唯一已知的方法是禁用远程桌面服务器配置中的虚拟通道(Virtual Channels)。虽然这确实会阻止此工具的使用,但同时也会禁用复制粘贴功能,这可能成为用户使用的障碍或造成很大不便。
虽然可以在 RDP 中禁用动态虚拟通道,但以下用于实现相同目的的解决方案对 Citrix 无效:https://support.citrix.com/article/CTX202153