如何在没有端口转发或集中式服务器的情况下创建对等连接?

时间:2013-06-04 02:04:14

标签: p2p

我记得读过一篇关于建议的方法的文章。如果我没记错的话,研究人员通过向彼此发送HTTP数据包成功创建了与另一个网络上的客户端的连接而没有端口转发(Alice假装Bob是一个HTTP Web服务器,而Bob假装Alice是一个Web服务器)。

我不确定这是否有意义,但有谁知道我在哪里可以找到这篇文章,或者有没有人有任何其他想法如何在没有中央服务器或端口转发的情况下将两个客户端连接在一起?

甚至可能吗?

编辑:我知道程序监听的计算机和端口的IP。

2 个答案:

答案 0 :(得分:27)

有可能。我看到你的问题至少 2部分。 (它不会是HTTP数据包。它比那复杂得多。)

首先关闭,我相信你可能在谈论一个称为分散式P2P网络的概念。分散的对等网络背后的主要思想是,在这样的网络中联合的节点不需要中央服务器或服务器组。

您可能已经知道,大多数常见的集中式对等网络都需要这样的集中式系统来交换和维护节点之间的互连。基本概念是这样,新节点将连接到其中一个主服务器,以检索有关网络上其他节点的信息,以维持其连接性和可用性。中央系统通过服务器不断地同步网络状态,相关信息和彼此之间的中央协调来维护。

另一方面,分散式网络没有任何结构或预定核心。这种对等模型也称为非结构化P2P网络。任何新节点都将从“父”节点复制或继承原始链接,并随着时间的推移形成自己的列表。这种非结构化网络的分散有几类。

有趣的是,缺乏中央命令和控制系统使其成为现代恶意软件僵尸网络的首选解决方案。一个很好的例子可能是Storm僵尸网络,它使用了所谓的被动P2P监视器(PPM)。无论受感染的主机是否位于防火墙或NAT后面,PPM都能够找到受感染的主机并构建对等列表。维基百科的文章 Storm botnet 是一本有趣的读物。还有一项名为 Towards Complete Node Enumeration in a Peer-to-Peer Botnet 的大型合作研究,它提供了Storm僵尸网络所采用的优秀概念分析和技术。

其次,你可能在谈论UDP打孔。这是一种技术或算法,用于通过第三个集合服务器使用第三个评论主机维护NATed路由器/网关后面的2个主机之间的连接。

Bryan Ford,Pyda Srisuresh和Dan Kegel撰写了一篇很好的论文,名为 Peer-to-Peer Communication Across Network Address Translators

答案 1 :(得分:3)

正如所回答的,点对点连接需要在两台(可能是)住宅计算机之间建立连接,这需要在两个防火墙上打孔。有关打孔的具体示例,请参阅pwnat: "The only tool to punch holes through firewalls/NATs without a third party"。简单来说,这个过程是这样的:

  1. "服务器" (谁不知道客户端的IP地址,但客户端知道服务器)每30秒向ICMP Echo Request发送一个非常具体的1.2.3.4数据包。在转换期间,NAT会在收到响应时记录此数据包。
  2. 客户端向服务器发送ICMP Time Exceeded数据包,这是一种通常包含无法传递的数据包的数据包。客户端事先知道服务器发送到1.2.3.4的确切数据包,将整个数据包嵌入到数据字段中。
  3. NAT识别Echo Request数据包并愉快地将整个 Time Exceeded数据包,源IP和所有中继到正确的用户,即服务器。瞧,现在服务器知道客户端的IP和端口号。
  4. 现在服务器知道了地址,它开始不断地向客户端发送UDP数据包,尽管客户端的NAT没有预料到它们,因此会忽略它们。
  5. 客户端开始向服务器发送UDP数据包,服务器的NAT将其识别为对服务器数据包的响应,并对其进行适当的路由。
  6. 现在客户端正在向服务器发送UDP数据包,服务器的UDP数据包流开始被客户端的NAT正确路由。
  7. 并且,通过6个简单的步骤,您已经在客户端和穿透两个住宅防火墙的服务器之间建立了UDP连接。拿那个,ISP!