Windows 上的 C++ 中是否有任何方法可以监视程序并重定向它在特定端口上发出的任何传出请求?我有一个简单的 C++ http 代理,并希望它能够通过自身自动重定向端口 80 上的所有浏览器请求。
3 回答
简单的方法是创建一个 Windows 内核挂钩来捕获套接字请求并将它们重新路由到您的代理。
一些有用的文档是:
http://www.internals.com/articles/apispy/apispy.htm
如果您使用的是 Windows Vista 或更高版本,请考虑使用 Windows Filtering Platform (WFP):
http://www.microsoft.com/whdc/device/network/wfp.mspx
还可以考虑查看Detours(商业)和EasyHook(免费)。它们显着简化了编写挂钩和重定向 API 调用(Win32 和应用程序)的过程。
如果您的意思是 [任何目标端口] 到 [一个端口],那么您将不得不依赖特殊的驱动程序。Windows 的问题是无法本地阻止 [drop] 数据包。例如,一个常见的解决方案是 winpcap。但是,虽然您可以监控流量,但您无法停止流量或以有用的方式对其进行修改。
在 Windows 上,我看到的唯一解决方案是使用一些开放的 TUN/TAP 适配器。这样,您就可以修改离开系统的每个数据包。
如果您事先知道您将使用的目标端口,那么它会变得相当简单。只需编写一个仅更改目标端口的直通 C++ 套接字程序。
如果要重定向浏览器请求,则只需在浏览器中编辑设置即可。
该程序必须在主机操作系统的内核模式下以管理权限运行。
虽然我在 Windows 内核挂钩方面没有丰富的经验,但在 BSD 和 linux 中,安装一个内核模块来覆盖创建套接字的系统调用并可以轻松地将所有套接字重定向到选择的代理套接字是微不足道的。