使用 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的主要内容,如果未能解决你的问题,请参考以下文章
Torrent Tracker 信息哈希 GET 请求 - Python