【问题标题】:How would one connect two clients behind firewalls?如何在防火墙后面连接两个客户端?
【发布时间】:2010-11-21 00:23:08
【问题描述】:

使用 Live Messenger 等即时消息应用程序或 Google Talk 桌面客户端时,计算机可以在彼此之间传输文件。我不能肯定地说,但我相当肯定计算机之间传输的数据不会通过微软或谷歌的 IM 服务器,而是两台装有 IM 软件的计算机直接相互通信。我想知道客户端之间是否或如何建立这种直接连接,以及我将如何自己实现类似的东西。

我有一些使用个人网络的经验,但我只了解客户端-服务器关系,其中服务器始终在侦听(并且端口不会被防火墙阻止)并且客户端在需要数据时向服务器发出请求.

【问题讨论】:

    标签: networking firewall data-transfer


    【解决方案1】:

    如果我要实现这个,我会考虑几个选项。

    1. 让防火墙将给定端口转发到网络内的 PC。这将使您可以从外部世界连接到服务器。

    2. 让防火墙后的客户端连接到防火墙外的可见服务器。

    简而言之,对话中的至少一方需要对另一方可见(服务器),以便他们可以连接到它。无论如何,一旦建立连接,客户端和服务器将能够毫无问题地来回通信。

    【讨论】:

      【解决方案2】:

      有一种被很多客户使用的方法叫做“针孔”:

      我向你发送了一个 UDP 数据包,这在我的防火墙上戳了一个洞(允许 UDP 数据包,假设是我的防火墙的响应,由你发送并由我接收)。该数据包会被您的防火墙丢弃。

      你向我发送了一个 UDP 数据包,在你的防火墙上戳了一个洞。该数据包应该会到达我,然后我可以发送另一个数据包到达您那里,我们可以通过我们的防火墙通过 UDP 进行通信。

      【讨论】:

      • 这不是问题的有效答案吗?
      【解决方案3】:

      做大多数木马会做的事:

      反向连接

      编辑:

      如果有两台机器位于防火墙后面,您将需要某种第三个“代理”

      【讨论】:

      • 反向连接在他描述的情况下不起作用。
      【解决方案4】:

      我使用了一个名为Hamachi 的程序,它有点像点对点 vpn(虚拟网络到网络)。然后我按原样编写客户端服务器应用程序。这是一种快速获得通过 Internet 连接的功能的方法,而无需处理 NAT 路由器所需的技巧。

      如果您需要“正确”执行此操作,常用方法之一是udp hole punching。当您发送 Web 请求时,您的防火墙知道期望返回数据作为响应。诀窍是客户端 A 和客户端 B 都联系 Internet 上的服务器。服务器将客户端 A 发出的请求的详细信息传递给客户端 B,反之亦然。一旦建立了初始连接,即使主服务器不再存在,它们也可以继续通信。

      【讨论】:

      【解决方案5】:

      如果两个客户端都位于没有被针孔的防火墙后面并且没有使用 VPN 软件,那么它们是通过第 3 方服务器进行通信的。期间。

      【讨论】:

        猜你喜欢
        • 2012-11-29
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2010-11-27
        • 2015-04-17
        相关资源
        最近更新 更多