我有两个java库。 一个连接到DHT,可以成功下载torrent文件。 另一个下载与torrent相关的实际数据。
torrent客户端库需要torrent中的announce或announce-list部分,并且不理解'nodes'条目。
问题是如何更改torrent客户端代码以理解torrent文件的“节点”部分。 要么 如何从一组ip:port DHT对等地址计算跟踪器URL?
我可以通过猜测端口号并在其上附加/宣布来猜测网址..但这肯定是不对的?
有谁知道这是如何运作的?
答案 0 :(得分:2)
对于仅DHT操作,您不需要通知URL。如果库本身需要一个你可以插入一个虚拟URL,格式dht://<infohash in hex>
很常见,但没关系,因为它不会被使用。
另一方面,DHT部分不需要nodes
执行查找,它只是根据torrent的infohash进行操作。节点可以可选地注入到dht客户端以进行自举,例如,通过对它们执行ping操作,但如果它已经被引导则不需要。
DHT客户端完成get_peers
和announce
次查找后,可以将对等列表注入到torrent客户端。
由于您正在使用我的库:您可以使用PeerLookupTask从DHT和AnnounceTask读取torrent对等列表,以将您的torrent端口添加到列表中。获得的IP和端口必须传递给torrent客户端。 GetPeers CLI命令包含如何使用第一部分的示例。 还有utility methods应该涵盖常见用例。
答案 1 :(得分:1)
作为替代方案,我可能会建议您查看Bt,这是一个Java 8 BitTorrent客户端,并已与8472的mldht集成:https://github.com/atomashpolskiy/bt