编写代理以侦听从客户端到服务的信息

时间:2010-08-12 09:14:48

标签: c# .net proxy

我需要编写一个充当客户端和服务之间代理的应用程序。我想做的就是读取从客户端到服务的双向传输数据,反之亦然。本质上,我希望只需插入此代理即可,无需在客户端或服务中重新配置端口设置。这可能吗?我可以在C#.Net框架中使用哪些特定的库来提供帮助吗?

编辑:该服务在远程计算机上。

编辑:示例:让我们假设客户端通过端口1234与服务进行通信,并且服务通过端口5678与客户端通信。我希望应用程序监听并读取数据传输通过这些端口,而无需实际重新配置客户端或服务。这可能吗?

2 个答案:

答案 0 :(得分:3)

如果您要阅读/收听/捕获数据,那么它不需要是代理。我会推荐WinPcap库(http://www.winpcap.org/)。虽然它是一个C / C ++库,但我认为C#/ .NET应用程序很难使用它。

答案 1 :(得分:1)

如果您希望在代理程序启动后立即重定向正在进行的连接,那么简短的答案很难,真的很难也不可能。据我所知,一旦建立了两端之间的连接,你就无法改变它(除非你有权访问路由器并动态修改其NAT,就像负载均衡器......)。如果你只想阅读&不要修改流量数据,使用WinPcap或任何数据包嗅探器。在金钱和技术工作方面,这些解决方案中的任何一个都非常昂贵:)

因为你没有给我们你想要做的事情,我认为你不需要那么“复杂”。这是一个解决方案,以防您满足以下先决条件:

  • 客户端通过域名连接到服务,而不是绝对IP,反之亦然。这很重要,因为我们要更改主机文件中的DNS以“伪造”端点服务器到我们的代理服务器地址。
  • 您对客户端计算机具有访问权限(管理员)&服务机器做出任何改变。

接下来你应该做的是:

  • 将客户端计算机上服务服务器的主机名IP更改为代理服务器的IP。这只会改变OS DNS解析器的结果。执行服务服务器的反转方式。
  • Drop&重新建立2台客户端机器之间的连接;服务器。现在,通过代理服务器正确地“代理”每个连接。
哈,非常错综复杂,但我觉得......我希望有人能为这种情况提供更好的解决方案,我很期待听到这一点。