如何在 libtorrent 中应用代理?

Posted

技术标签:

【中文标题】如何在 libtorrent 中应用代理?【英文标题】:How to apply a proxy in libtorrent? 【发布时间】:2016-08-21 20:03:26 【问题描述】:

我正在创建一个 torrent 客户端并想为其添加一个代理。我似乎无法让它工作。我正在使用“http://ipmagnet.services.cbcdn.com”来检查我的客户端正在分发给对等方和跟踪器的 IP 地址。如何修复我的代码以正确地将代理应用到客户端?

import libtorrent as lt
import time
import os

ses = lt.session()
ses.listen_on(6881, 6891)
r = lt.proxy_settings()
r.proxy_hostnames = True
r.proxy_peer_connections = True
r.hostname = "*myproxyinfo*"
r.username = "*myproxyinfo*"
r.password = "*myproxyinfo*"
r.proxy_port = 1080
r.proxy_type = lt.proxy_type().socks5_pw
#print lt.proxy_type().socks5_pw
ses.set_dht_proxy(r)
ses.set_peer_proxy(r)
ses.set_tracker_proxy(r)
ses.set_web_seed_proxy(r)
ses.set_proxy(r)
t = ses.settings()
t.force_proxy = True
t.proxy_hostnames = True
t.proxy_peer_connections = True
t.proxy_tracker_connections = True
#t.anonymous_mode = True
#ses.set_settings(t)
#print ses.get_settings()
ses.dht_proxy()
ses.peer_proxy()
ses.tracker_proxy()
ses.web_seed_proxy()
ses.proxy()
ses.set_settings(t)


magnet_link = "magnet:?xt=urn:btih:1931ced5c4e20047091742905f30f8d0b69c9ca9&dn=ipMagnet+Tracking+Link&tr=http%3A%2F%2Fipmagnet.services.cbcdn.com%3A80%2F"

params = "save_path": os.getcwd() + r"\torrents",
               "storage_mode": lt.storage_mode_t.storage_mode_sparse,
              "url": magnet_link
h = ses.add_torrent(params)

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

        state_str = ['queued', 'checking', 'downloading metadata', \
            'downloading', 'finished', 'seeding', 'allocating']
        print '%.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])

    time.sleep(1)

【问题讨论】:

【参考方案1】:

我建议您查看会话生成的警报,看看是否有任何东西无法使用代理。

默认情况下,libtorrent 认为代理是尽力而为的。如果由于任何原因失败,libtorrent 将回退到尝试直接连接。

如果您想强制使用代理,如果代理失败则失败,请将 force_proxy 设置为 true。

【讨论】:

【参考方案2】:

我花了几个小时才弄明白,这对我有用

ses = lt.session()
r = lt.proxy_settings()
r.hostname = "*myproxyinfo*"
r.username = "*myproxyinfo*"
r.password = "*myproxyinfo*"
r.port = 1080
r.type = lt.proxy_type_t.socks5_pw
ses.set_peer_proxy(r)
ses.set_web_seed_proxy(r)
ses.set_proxy(r)
t = ses.settings()
t.force_proxy = True
t.proxy_peer_connections = True
t.anonymous_mode = True
ses.set_settings(t)
print(ses.get_settings())
ses.peer_proxy()
ses.web_seed_proxy()
ses.set_settings(t)

我将r.proxy_port 更改为r.portr.proxy_type = lt.proxy_type().socks5_pw 更改为r.type = lt.proxy_type_t.socks5_pw

我已经确认这可以使用 ipmagnet 工作

【讨论】:

以上是关于如何在 libtorrent 中应用代理?的主要内容,如果未能解决你的问题,请参考以下文章

如何在应用程序中访问代理详细信息(袜子和 http)?

如何在 C# 应用程序中使用代理

如何在 React 应用程序上代理 Rsocket 请求

我可以在 iOS 应用程序中设置设备级代理吗?如何?

如何在反向代理后面获取应用程序基本 URL

Tomcat如何设置代理