2

我可能对 BitTorrent、DHT 和“swarm”的工作原理缺乏一些基本的了解,因为我什至不确定 DHT 和“swarm”是否是一回事。

但是,我正在尝试从其磁力链接(和哈希)中查找对等点、对等点的数量以及一些有关种子的统计信息。

我已经寻找了一些库来实现这一点,但它们似乎已经过时或不相关,或者只是对事物进行了编码。

如何连接和请求信息?一个简短的解释将是令人愉快的。

4

1 回答 1

4

官方规格: http: //www.bittorrent.org/beps/bep_0000.html
非官方规格:http ://wiki.theory.org/BitTorrentSpecification

BEncoding是在 bittorrent 中用于多种目的的数据序列化格式

DHT 是一个全局的、分散的、迭代的、基于 UDP 的查找系统,可用于根据infohash定位参与特定swarm的客户端,该信息可以直接从磁力链接获得,也可以从.torrent元数据文件计算.

如果您有跟踪器的公告 URL (torrent 文件或磁力链接的可选部分),您可以直接从跟踪器获取客户端地址。

一旦你获得了特定群的客户端地址,你就可以连接到它们——或者如果你已经向 DHT/负责任的跟踪器宣布自己,它们将连接到你——使用 bittorrent 有线协议,它基本上是一个异步的二进制消息传递协议.

要获得功能齐全、最先进的 bittorrent 客户端,您必须实现以下内容:

  • 一个 DHT 节点(基于 UDP 的编码)
  • 跟踪器宣布和抓取协议(使用基于 HTTP 的编码和基于 UDP 的自定义二进制协议)
  • bittorrent 有线协议(基于 TCP 的自定义二进制协议,带有可选的扩展层。一些消息是经过编码的。一种称为 µTP 的基于 UDP 的拥塞避免传输协议也可以替代 TCP)
  • 一个 torrent 文件解析器(显然是编码)
  • 一般的东西,如排队活动种子、文件管理、高并发网络 IO

这是很多工作,据我所知,在 ruby​​ 中还没有完成。因此,要么你有很多事情要做,要么你可能想使用用不同语言编写的bittorrent库(例如libtorrent)或与提供Web服务(例如传输)的客户端接口。

于 2012-11-15T02:37:40.793 回答