使用 ruby​​ 连接到 torrent "swarm" 或 DHT

Posted

技术标签:

【中文标题】使用 ruby​​ 连接到 torrent "swarm" 或 DHT【英文标题】:Connect to torrent "swarm" or DHT with ruby 【发布时间】:2012-11-14 18:29:17 【问题描述】:

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

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

我已经寻找了一些库来完成此操作,但它们似乎已经过时或不相关,或者只是对事物进行了编码。

如何连接和请求信息?一个简短的解释会很有趣。

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

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

【讨论】:

好的,谢谢你的解释。假设我有一个只有哈希和种子名称的磁力链接 - 然后呢? 那么您需要通过 DHT 定位客户端,连接到它们并使用元数据交换扩展来获取元数据文件。然后您可以开始正确下载数据。还有一些 torrent 存档根据它们的哈希值提供 torrent 文件。 我该如何“定位”这些客户? 如果你想手动操作,你可以用谷歌搜索哈希值,下载 torrent 并在 bittorrent 客户端中启动它。要以编程方式执行此操作,您需要一个 DHT 实现。 好吧这还是很模糊。我将如何实施 DHT?如果你能更具体一点就太好了,因为我打算写一个红宝石宝石

以上是关于使用 ruby​​ 连接到 torrent "swarm" 或 DHT的主要内容,如果未能解决你的问题,请参考以下文章

如何连接到从 bittorrent 获得的对等点

使用 Ruby 连接到 Hbase

Torrent Tracker 信息哈希 GET 请求 - Python

RUBY 脚本:连接到 Telnet 会话时等待任何输出

ruby&postgres Ruby 连接到 macOS 环境中的数据库错误

如何将 jQuery Datepicker 连接到我的 Ruby on Rails 表单?