我已经构建了一个DHT爬网程序,它从bittorrent标准读取/使用BEP5。有了它,我可以从种子中收集信息哈希,并查询DHT节点中的对等节点。如此说来,拥有:
- torrent信息哈希
- 当前洪流同行
如何下载torrent?
BEP 9建议采用以下形式的磁铁模式(省略跟踪器和名称部分(:
magnet:?xt=urn:btih:<info-hash>&dn=<name>&tr=<tracker-url>&x.pe=<peer-address>
使用这种方法,我目前的torrent客户端(Transmission(在尝试获取对等端时遇到了困难。在兼容性问题的情况下,我尝试了许多其他客户端,但没有成功。
我的第二种方法是将相应的DHT节点临时加载到客户端,并以最简单的形式加载magnet url:
magnet:?xt=urn:btih:<info-hash>
没有结果。
在下面的代码中,假设我们有infohash";XXXXXXXXXXXXXXXXXXXXXXXXXXXX";我们从监听DHT节点";router.bittorrent.com.6881";,下面的示例不应该获取元数据吗?
import libtorrent as lt
import time
session = lt.session()
session.listen_on(6881, 6891)
session.add_dht_router("router.bittorrent.com", 6881)
session.start_dht()
time.sleep(1)
params = {"url":"magnet:?xt=urn:btih:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "save_path":'.'}
h = session.add_torrent(params)
while (not h.has_metadata()):
time.sleep(1)
# download...
小编澄清第一种方法:
我刚刚从DHT中的一个信息哈希中发现了一个ip:port为X:Y的对等体,另一个ip:port为Z:Y的逻辑相同的对等体。下面的磁铁粘贴在任何支持BEP 9的torrent客户端中,难道不应该下载torrent吗?
magnet:?xt=urn:btih:<info-hash>&x.pe=X:Y&x.pe=Z:Y
如果你需要一个磁铁链接下载原理的一般概述,那么这个答案应该涵盖它
如果你想调试你的实现,你需要深入了解细节,并确保所有必要的步骤都是可观察的,这样你就可以检查哪里失败了。
- DHT查找是否返回任何对等
- 你能连接到同龄人吗?对等方是否表示支持必要的扩展
- 您的客户是否提出了获取metdata的请求
- 收到回复了吗
- 回复是否有效