我无法从公共跟踪器 libtorrent 下载 torrent

Posted

技术标签:

【中文标题】我无法从公共跟踪器 libtorrent 下载 torrent【英文标题】:I can't download torrent from public tracker libtorrent 【发布时间】:2015-06-23 16:36:41 【问题描述】:

我在 python 中使用libtorrent 模块来下载种子。我可以从私人跟踪器下载种子,但不能从公共跟踪器下载。我尝试使用各种种子,我可以使用“传输”下载。我检查了 4 个不同的连接,都一样。

def downloadTorrent(torrent):
    """
    Download torrent using libtorrent library.
    Torrent will be stored at the current directory.
    """
    ses = lt.session()
    ses.listen_on(6881, 6891)

    info = lt.torrent_info(torrent)
    h = ses.add_torrent('ti': info, 'save_path': './')
    ses.start_dht()
    print 'starting', h.name()

    while (not h.is_seed()):
        s = h.status()

        state_str = ['queued', 'checking', 'downloading metadata', \
          'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
        print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
          (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
          s.num_peers, state_str[s.state]),
        sys.stdout.flush()

        time.sleep(1)

    print h.name(), 'complete'

当我尝试时,我得到:

0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading 

它停在那里。

我不知道它是否有帮助,但私人跟踪器使用的是 http 而不是 udp,它不允许 DHT。

【问题讨论】:

尝试时会发生什么?您是否收到可以包含在问题中的错误? 它没有连接到任何对等点。 追踪器真的有效吗?!试试您可以在此处列表中找到的跟踪器:coppersurfer.tk 许多较旧的公共跟踪器不再工作。 也许你需要引导 DHT。如果不打印 libtorrent 生成的警报,查看它们以找出可能相关的警报,就无法知道。如果您无法弄清楚,请使用更多信息更新您的问题 您发布的代码不会向 libtorrent 询问警报。你确定你只是不要求他们吗?如果您询问并从字面上得到 0 个警报,请确保在 session_settings 中设置警报掩码中的所有位。 【参考方案1】:

您并没有真正解释如何在 downloadTorrent 函数中提供种子文件。如果您已经在计算机上下载了 torrent 文件,您的功能就可以工作。

如果你想提供一个种子地址作为这个函数的参数,你需要像torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())这样的字节读取http响应

这是适用于 python 2.7 的完整代码:

import libtorrent as lt
import urllib2

public_torrent = 'http://releases.ubuntu.com/14.04.3/ubuntu-14.04.3-desktop-amd64.iso.torrent'

def downloadTorrent(torrent_url):
    """
    Download torrent using libtorrent library.
    Torrent will be stored at the current directory.
    """
    ses = lt.session()
    ses.listen_on(6881, 6891)

    # read torrent file as bytes
    torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

    info = lt.torrent_info(torrent)
    h = ses.add_torrent('ti': info, 'save_path': './')
    ses.start_dht()
    print 'starting', h.name()

    while (not h.is_seed()):
        s = h.status()

        state_str = ['queued', 'checking', 'downloading metadata', \
          'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
        print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
          (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
          s.num_peers, state_str[s.state]),
        sys.stdout.flush()

        time.sleep(1)

    print h.name(), 'complete'

downloadTorrent(public_torrent)

【讨论】:

以上是关于我无法从公共跟踪器 libtorrent 下载 torrent的主要内容,如果未能解决你的问题,请参考以下文章

从 libtorrent 中的 url 种子低速下载

我无法通过 libtorrent-python 接收磁链接元数据,而无需指定跟踪器的 udp 协议

如何在python中使用libtorrent的udp协议跟踪器协议

scrape_tracker 不使用 libtorrent 发出任何警报

如何在 libtorrent 中应用代理?

libtorrent 内置跟踪器 [关闭]