我正在寻找一个关于如何重定向套接字请求的好解决方案。
例如,我有一个工具/应用程序尝试连接到25.25.25.25:80但是。我需要将所有这些请求重定向到54.54.54.54:80(也是http请求)。
我知道的一个解决方案是修改“hosts”文件并重写主机。但在我的情况下似乎不是一个好的解决方案。我不想修改用户系统文件。我想修改查询路由,只要我的辅助应用程序正在运行。如果您关闭它,第一个应用程序将查询原始主机。
可以用C#做到吗?
答案 0 :(得分:1)
写一个代理应用程序,它正在25.25.25.25:80(HttpListener)监听,将每个传入的请求转发到54.54.54.54:80(例如WebClient),并发回在后一个地址监听的应用程序的答案。
修改强>
如果您无法访问地址为25.25.25.25的计算机,并且您想要在客户端计算机上解决问题,那么您可以使用WinPcap(使用P / Invoke或其中一个很好的.NET包装器) 。编写一个具有pcap实例的应用程序,它将每个传出数据包的目标IP地址为25.25.25.25和TCP端口80,将地址重写为54.54.54.54,重新计算TCP头的校验和字段,然后发送数据包。您还需要另一个pcap实例,它接收源地址为54.54.54.54的传入TCP数据包,将地址重写为25.25.25.25,重新计算TCP头的校验和字段,然后发送数据包。 (一旦我编写了类似的程序,所以我很确定这种方法可行。你可能需要使用队列,一个用于传入,一个用于传出的数据包,以及多个线程。)
答案 1 :(得分:1)
因此,它的主要目的是重写应用程序使用的资源。我的情况是图像。
这样的例子: 有一个应用程序,需要用户登录(用户名/密码)。在用户登录之后,该应用程序从www.supersite.com/avatars/%username%.gif中提取一个图像(化身)。我对www.supersite.com没有任何影响,我不想破解应用程序的资源来重写URL。第二个应用程序(我们试图创建)的目的是,收听www.supersite.com/avatars/%username%.gif的http调用并将其重写为www.mysite.com/avatars/%username% .gif,因为第二个应用正在运行。
希望这是一个很好的例子。 :)
答案 2 :(得分:0)
应该可以在C#中完成。在这里你有你想要的,但源代码是C ++。我认为值得一看:http://www.quantumg.net/portforward.php。
答案 3 :(得分:0)
在我的情况下,它似乎不是一个好的解决方案。
对我来说似乎也是这样。如果你能解释一下你在这里想要达到的目标,或许其他人遇到了同样的问题并且有更简单的解决方案,那就太好了。
无论如何,基本上你不能这样做,除非你使用某种你可以影响的代理。您要创建的代理程序(以下称:代理程序)在哪里运行?你能改变发出请求的工具(工具)吗?
如果您的代理在25.25.25.25服务器上运行,您可以捕获端口80上的所有传入请求并将其转发到54.54.54.54,但原始服务器将无法运行(因为您的代理已占用端口80 ), 或相反亦然。
如果代理在客户端上运行,则必须让该工具连接到该代理(即127.0.0.1),而不是请求要连接的IP地址,并回退到如果代理未运行或未及时响应,则为默认地址(25.25.25.25)。