6

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

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

4

5 回答 5

6

许多客户使用的一种方法称为“针孔”:

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

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

于 2009-08-19T16:08:20.537 回答
6

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

If you need to do it 'properly', one of the common methods is udp hole punching. When you send a web request your firewall knows to expect back data in response. The trick is that both client A and client B contact a server on the Internet. The server passes details of the request client A made to client B and and vice versa. Once the initial connection is established they can continue communicate even if the main server is no longer there.

于 2009-08-19T16:30:35.920 回答
0

如果我正在实施这个,我会考虑几个选项。

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

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

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

于 2009-08-19T15:59:12.037 回答
0

If both clients are behind a firewall that hasn't been pinholed and no VPN software is being employed they are communicating through a 3rd party server. Period.

于 2009-08-19T16:41:52.947 回答
-2

做大多数木马会做的事情:

反向连接

编辑:

在防火墙后面有两台机器,你需要某种第三个“代理”

于 2009-08-19T16:23:45.027 回答