繁体   English   中英

在Windows上拦截/重定向传出的HTTP连接

[英]Intercepting / Redirecting outgoing http connections on windows

我想重定向Windows计算机上的传出http连接(不使用系统代理)。

背景:

我有一些旧软件可以与现已失效的Web服务交互。 我已经在一个简单的桌面应用程序中模拟了该服务,并希望将传出的http请求重新路由到该应用程序。

实验上我已经使用Windows主机文件成功重定向到localhost,但这是不切实际的,因为我还有其他需要在默认http端口80上侦听的服务,并且我不想为此设置另一个物理服务器

旧版软件不使用系统代理,因此像FiddlerCore之类的解决方案将无法工作(不幸的是,因为它很棒!)

我注意到在与Winsock结合使用的类似问题中提到的EasyHook,但是我对低级编程的经验非常有限,在我踏上漫长而混乱的旅程之前,我想检查一下我是否在正确的道路上!

因此,从理论上讲,是否有可能通过钩住winsock来拦截和重定向不使用系统代理的出站http通信(最好使用c#中的easyHook)?

一个简单的是/否答案就可以了,有些推理,甚至更好的文档都很棒

我已经做过很多次了,所以这绝对有可能。 使用以下步骤开始。

  1. 让您的程序使用CreateProcess启动目标应用程序,然后将CREATE_SUSPENDED传递给dwCreationFlags参数。 这将启动目标应用程序,但不会开始执行。
  2. 注入包含您的“蹦床”功能的DLL。
  3. 挂钩Winsock函数gethostbyname
  4. 在目标进程主线程上调用ResumeThread以开始执行。
  5. 在挂钩函数中,当它返回指向hostent结构的有效指针时,调用真正的 gethostbyname Winsock函数,更改地址数据以使其指向您的回送设备(localhost)。

根据目标应用程序的工作方式,您可能需要挂钩其他Winsock函数,但是挂钩gethostbyname通常对于这种情况就足够了。

您将需要编写C ++或C中DLL中的钩子函数。在这里使用C#可能不是一种选择,而且它会引入很多依赖关系,这些依赖关系可能导致与目标应用程序发生冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM