diff --git a/src/Config.py b/src/Config.py index 9dfcda27..60b74f78 100644 --- a/src/Config.py +++ b/src/Config.py @@ -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') diff --git a/src/Connection/Connection.py b/src/Connection/Connection.py index 5037b766..4071c773 100644 --- a/src/Connection/Connection.py +++ b/src/Connection/Connection.py @@ -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) diff --git a/src/Site/SiteAnnouncer.py b/src/Site/SiteAnnouncer.py index 917a9051..090e0afc 100644 --- a/src/Site/SiteAnnouncer.py +++ b/src/Site/SiteAnnouncer.py @@ -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():