使用ruby连接到torrent“swarm”或DHT

时间:2012-11-14 18:29:18

标签: ruby p2p bittorrent dht

我可能缺乏对BitTorrent,DHT和“群体”如何工作的基本理解,因为我甚至不确定DHT和“群体”是否相同。

但是,我正在尝试通过其磁力链接(和哈希)找到对等体,对等体的数量以及一些关于洪流的统计数据。

我已经找到了一些库来实现这一目标,但它们似乎已经过时或无关,或只是对事物进行编码。

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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

  • DHT节点(通过UDP进行编码)
  • tracker宣布并搜索协议(使用HTTP上的bencoding和UDP上的自定义二进制协议)
  • bittorrent有线协议(TCP上的自定义二进制协议,带有可选的扩展层。一些消息是bencoded的。一种称为μTP的拥塞避免的基于UDP的传输协议也可作为TCP的替代)
  • 一个torrent文件解析器(显然是bencoding)
  • 排队活动种子,文件管理,高度并发网络IO等常规内容

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