我希望在Windows机器上重定向传出的http连接(不使用系统代理)。
背景:
我有一些遗留软件可以与现已停止使用的Web服务进行交互。我已在一个简单的桌面应用程序中模拟该服务,并希望将传出的http请求重新路由到此应用程序。
实验上我已经使用windows hosts文件成功重定向到localhost,但这是不切实际的,因为我有其他服务需要在默认的http端口80上监听,我不想为此设置另一个物理服务器< / p>
传统软件不使用系统代理,因此像FiddlerCore这样的解决方案不会工作(不幸的是,因为这很棒!)
我注意到EasyHook在类似的问题中提到过,与winsock一起提到,但是我对低级编程的体验非常有限,在我开始漫长而混乱的旅程之前,我想检查一下我在正确的道路上!
那么,理论上是否可以通过挂钩winsock来拦截和重定向不使用系统代理的传出http流量(最好使用c#中的easyHook)?
简单的是/否答案会很好,有些推理,甚至更好的文档会很棒
答案 0 :(得分:1)
我做了很多次,所以绝对有可能。使用以下步骤开始。
CreateProcess
启动目标应用程序,并将CREATE_SUSPENDED
传递给dwCreationFlags
参数。这将启动目标应用程序,但不会开始执行。gethostbyname
。ResumeThread
以开始执行。gethostbyname
结构的有效指针时,调用真正的 hostent
Winsock函数,改变地址数据,使其指向你的环回设备(本地主机)。根据目标应用程序的工作方式,您可能需要挂钩其他Winsock函数,但挂钩gethostbyname
通常就足够了。
您将需要在C ++或C中编写DLL中的钩子函数。使用C#可能不是一个选项,而且它会引入许多可能导致与目标应用程序冲突的依赖项。