Support custom proxy for tracker connections

This commit is contained in:
shortcutme 2018-07-16 01:47:49 +02:00
parent ec8b53263c
commit 7475fa69fa
No known key found for this signature in database
GPG Key ID: 5B63BAE6CB9613AE
3 changed files with 15 additions and 4 deletions

View File

@ -234,7 +234,7 @@ class Config(object):
self.parser.add_argument('--ip_external', help='Set reported external ip (tested on start if None)', metavar='ip')
self.parser.add_argument('--trackers', help='Bootstraping torrent trackers', default=trackers, metavar='protocol://address', nargs='*')
self.parser.add_argument('--trackers_file', help='Load torrent trackers dynamically from a file', default=False, metavar='path')
self.parser.add_argument('--trackers_proxy', help='Force use proxy to connect to trackers', default="disable", choices=["disable", "tor"])
self.parser.add_argument('--trackers_proxy', help='Force use proxy to connect to trackers (disable, tor, ip:port)', default="disable")
self.parser.add_argument('--use_openssl', help='Use OpenSSL liblary for speedup',
type='bool', choices=[True, False], default=use_openssl)
self.parser.add_argument('--disable_db', help='Disable database updating', action='store_true')

View File

@ -112,8 +112,14 @@ class Connection(object):
self.sock = self.server.tor_manager.createSocket(self.ip, self.port)
elif config.tor == "always" and helper.isPrivateIp(self.ip) and self.ip not in config.ip_local:
raise Exception("Can't connect to local IPs in Tor: always mode")
elif config.trackers_proxy == "tor" and self.cert_pin and "zero://%s#%s:%s" % (self.ip, self.cert_pin, self.port) in config.trackers:
self.sock = self.server.tor_manager.createSocket(self.ip, self.port)
elif config.trackers_proxy != "disable" and self.cert_pin and "zero://%s#%s:%s" % (self.ip, self.cert_pin, self.port) in config.trackers:
if config.trackers_proxy == "tor":
self.sock = self.server.tor_manager.createSocket(self.ip, self.port)
else:
from lib.PySocks import socks
self.sock = socks.socksocket()
proxy_ip, proxy_port = config.trackers_proxy.split(":")
self.sock.set_proxy(socks.PROXY_TYPE_SOCKS5, proxy_ip, int(proxy_port))
else:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

View File

@ -241,8 +241,13 @@ class SiteAnnouncer(object):
handler = sockshandler.SocksiPyHandler(socks.SOCKS5, tor_manager.proxy_ip, tor_manager.proxy_port)
opener = urllib2.build_opener(handler)
return opener.open(url, timeout=50)
else:
elif config.trackers_proxy == "disable":
return urllib2.urlopen(url, timeout=25)
else:
proxy_ip, proxy_port = config.trackers_proxy.split(":")
handler = sockshandler.SocksiPyHandler(socks.SOCKS5, proxy_ip, int(proxy_port))
opener = urllib2.build_opener(handler)
return opener.open(url, timeout=50)
def announceTrackerHttp(self, tracker_address, mode="start", num_want=10):
if "ip4" in self.getOpenedServiceTypes():