拦截/重定向窗口上的传出http连接



我希望在Windows机器上重定向传出的HTTP连接(不使用系统代理)。

背景:

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

实验我已经使用windows主机文件重定向到本地主机成功,但这是不切实际的,因为我有其他服务需要监听默认http端口80,我不想设置另一个物理服务器只是为了这个

遗留软件不使用系统代理,所以像FiddlerCore这样的解决方案不起作用(不幸的是,因为这是了不起的!)

我注意到EasyHook在类似的问题中提到,与winsock一起,但我的低级编程经验非常有限,在我踏上漫长而令人困惑的旅程之前,我想检查一下我是在正确的道路上!

所以,理论上是否可以拦截和重定向不使用系统代理的http流量通过挂钩winsock(最好是c#中的easyHook)?

一个简单的是或否的答案就可以了,一些推理,甚至更好的文档将是非常棒的

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

  1. 让程序使用CreateProcess启动目标应用程序,并将CREATE_SUSPENDED传递给dwCreationFlags参数。这将启动目标应用程序,但不会开始执行。
  2. 注入包含"trampoline"函数的DLL。
  3. 钩子Winsock函数gethostbyname .
  4. 在目标进程主线程上调用ResumeThread开始执行。
  5. 在钩子函数中调用real gethostbyname Winsock函数,当它返回一个指向hostent结构的有效指针时,更改地址数据,使其指向你的环回设备(localhost)。

根据目标应用程序的工作方式,您可能需要挂钩额外的Winsock函数,但挂钩gethostbyname通常是足够的。

你可能想用c++或C来编写DLL中的钩子函数。在这里使用c#可能不是一个选择,因为它会引入很多依赖项,可能会导致与目标应用程序的冲突。

最新更新