如何在 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.port
和r.proxy_type = lt.proxy_type().socks5_pw
更改为r.type = lt.proxy_type_t.socks5_pw
我已经确认这可以使用 ipmagnet 工作
【讨论】:
以上是关于如何在 libtorrent 中应用代理?的主要内容,如果未能解决你的问题,请参考以下文章