def create_connection(address, timeout=None, source_address=None): if address == "127.0.0.1": sock = socket.socket_noproxy(socket.AF_INET, socket.SOCK_STREAM) sock.connect(address) else: sock = socks.socksocket() sock.connect(address) return sock
def connect(self): self.type = "out" if self.ip.endswith(".onion"): if not self.server.tor_manager or not self.server.tor_manager.enabled: raise Exception( "Can't connect to onion addresses, no Tor controller present" ) 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 != "disable" and self.is_tracker_connection: 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) if "TCP_NODELAY" in dir(socket): self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) timeout_before = self.sock.gettimeout() self.sock.settimeout(30) self.sock.connect((self.ip, int(self.port))) # Implicit SSL should_encrypt = not self.ip.endswith( ".onion" ) and self.ip not in self.server.broken_ssl_ips and self.ip not in config.ip_local if self.cert_pin: self.sock = CryptConnection.manager.wrapSocket( self.sock, "tls-rsa", cert_pin=self.cert_pin) self.sock.do_handshake() self.crypt = "tls-rsa" self.sock_wrapped = True elif should_encrypt and "tls-rsa" in CryptConnection.manager.crypt_supported: try: self.sock = CryptConnection.manager.wrapSocket( self.sock, "tls-rsa") self.sock.do_handshake() self.crypt = "tls-rsa" self.sock_wrapped = True except Exception, err: if not config.force_encryption: self.log( "Crypt connection error: %s, adding ip %s as broken ssl." % (err, self.ip)) self.server.broken_ssl_ips[self.ip] = True self.sock.close() self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.ip, int(self.port)))
def createSocket(self, onion, port): if not self.enabled: return False self.log.debug("Creating new Tor socket to %s:%s" % (onion, port)) if config.tor == "always": # Every socket is proxied by default, in this mode sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) else: sock = socks.socksocket() sock.set_proxy(socks.SOCKS5, self.proxy_ip, self.proxy_port) return sock
def connect(self): self.type = "out" if self.ip.endswith(".onion"): if not self.server.tor_manager or not self.server.tor_manager.enabled: raise Exception("Can't connect to onion addresses, no Tor controller present") 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 != "disable" and self.is_tracker_connection: 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) if "TCP_NODELAY" in dir(socket): self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) timeout_before = self.sock.gettimeout() self.sock.settimeout(30) self.sock.connect((self.ip, int(self.port))) # Implicit SSL should_encrypt = not self.ip.endswith(".onion") and self.ip not in self.server.broken_ssl_ips and self.ip not in config.ip_local if self.cert_pin: self.sock = CryptConnection.manager.wrapSocket(self.sock, "tls-rsa", cert_pin=self.cert_pin) self.sock.do_handshake() self.crypt = "tls-rsa" self.sock_wrapped = True elif should_encrypt and "tls-rsa" in CryptConnection.manager.crypt_supported: try: self.sock = CryptConnection.manager.wrapSocket(self.sock, "tls-rsa") self.sock.do_handshake() self.crypt = "tls-rsa" self.sock_wrapped = True except Exception, err: if not config.force_encryption: self.log("Crypt connection error: %s, adding ip %s as broken ssl." % (err, self.ip)) self.server.broken_ssl_ips[self.ip] = True self.sock.close() self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.ip, int(self.port)))
def create_connection(address, timeout=None, source_address=None): sock = socks.socksocket() sock.connect(address) return sock