C ++重定向传出连接

时间:2010-02-06 17:57:34

标签: c++ redirect hook firewall

在Windows上用C ++监控程序并重定向它在特定端口上发出的任何传出请求有什么办法吗?我有一个简单的C ++ http代理,并希望它能够自动重定向端口80上的所有浏览器请求。

3 个答案:

答案 0 :(得分:5)

这样做的简单方法是创建一个Windows内核挂钩来捕获套接字请求并将它们重新路由到您的代理。

有关这方面的一些有用文件是:

http://www.internals.com/articles/apispy/apispy.htm

如果您使用的是Windows Vista或更高版本,请考虑使用Windows过滤平台(WFP):

http://www.microsoft.com/whdc/device/network/wfp.mspx

另请考虑查看Detours(商业)和EasyHook(免费)。它们显着简化了编写钩子和重定向API调用(Win32和Application)的过程。

答案 1 :(得分:1)

如果您的[任何目的地端口]指[一个端口],那么您将不得不依赖特殊驱动程序。 Windows的问题是无法本地阻止[丢弃]数据包。例如,常见的解决方案是winpcap。但是,虽然您可以监控流量,但无法阻止流量或以有用的方式对其进行修改。

在Windows上,我见过的唯一解决方案是使用一些open TUN/TAP adapter。这样,您就可以修改离开系统的每个数据包。

如果您事先知道将要使用的目标端口,那么它会变得相当简单。只需编写一个直通c ++套接字程序,它只会更改目标端口。

如果您想重定向浏览器请求,则只需在浏览器中编辑设置即可。

答案 2 :(得分:0)

该程序必须在主机操作系统的内核模式下以管理权限运行。

虽然我没有丰富的Windows内核挂钩经验,但在BSD和Linux中,安装一个内核模块是很容易的,它会覆盖系统调用以创建套接字,并且可以轻松地将所有套接字重定向到所选择的代理套接字。