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 connectController(self): if "socket_noproxy" in dir( socket): # Socket proxy-patched, use non-proxy one conn = socket.socket_noproxy(socket.AF_INET, socket.SOCK_STREAM) else: conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.log.debug("Connecting to Tor Controller %s:%s" % (self.ip, self.port)) self.connecting = True try: with self.lock: conn.connect((self.ip, self.port)) # Auth cookie file res_protocol = self.send("PROTOCOLINFO", conn) cookie_match = re.search('COOKIEFILE="(.*?)"', res_protocol) if config.tor_password: res_auth = self.send( 'AUTHENTICATE "%s"' % config.tor_password, conn) elif cookie_match: cookie_file = cookie_match.group(1).encode("ascii").decode( "unicode_escape") if not os.path.isfile(cookie_file) and self.tor_process: # Workaround for tor client cookie auth file utf8 encoding bug (https://github.com/torproject/stem/issues/57) cookie_file = os.path.dirname( self.tor_exe) + "\\data\\control_auth_cookie" auth_hex = binascii.b2a_hex(open(cookie_file, "rb").read()) res_auth = self.send( "AUTHENTICATE %s" % auth_hex.decode("utf8"), conn) else: res_auth = self.send("AUTHENTICATE", conn) if "250 OK" not in res_auth: raise Exception("Authenticate error %s" % res_auth) # Version 0.2.7.5 required because ADD_ONION support res_version = self.send("GETINFO version", conn) version = re.search(r'version=([0-9\.]+)', res_version).group(1) if float(version.replace(".", "0", 2)) < 207.5: raise Exception( "Tor version >=0.2.7.5 required, found: %s" % version) self.setStatus("Connected (%s)" % res_auth) self.event_started.set(True) self.starting = False self.connecting = False self.conn = conn except Exception as err: self.conn = None self.setStatus("Error (%s)" % str(err)) self.log.warning("Tor controller connect error: %s" % Debug.formatException(str(err))) self.enabled = False return self.conn
def _make_socket(self): try: if "socket_noproxy" in dir(socket): # Socket proxy-patched, use non-proxy one control_socket = socket.socket_noproxy(socket.AF_INET, socket.SOCK_STREAM) else: control_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TODO: repeated code - consider making a separate method control_socket.connect((self._control_addr, self._control_port)) return control_socket except socket.error as exc: raise stem.SocketError(exc)
def connectController(self): if "socket_noproxy" in dir( socket): # Socket proxy-patched, use non-proxy one conn = socket.socket_noproxy(socket.AF_INET, socket.SOCK_STREAM) else: conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.log.info("Connecting to Tor Controller %s:%s" % (self.ip, self.port)) try: with self.lock: conn.connect((self.ip, self.port)) # Auth cookie file res_protocol = self.send("PROTOCOLINFO", conn) cookie_match = re.search('COOKIEFILE="(.*?)"', res_protocol) if config.tor_password: res_auth = self.send( 'AUTHENTICATE "%s"' % config.tor_password, conn) elif cookie_match: cookie_file = cookie_match.group(1).decode("string-escape") auth_hex = binascii.b2a_hex(open(cookie_file, "rb").read()) res_auth = self.send("AUTHENTICATE %s" % auth_hex, conn) else: res_auth = self.send("AUTHENTICATE", conn) assert "250 OK" in res_auth, "Authenticate error %s" % res_auth # Version 0.2.7.5 required because ADD_ONION support res_version = self.send("GETINFO version", conn) version = re.search('version=([0-9\.]+)', res_version).group(1) assert float( version.replace(".", "0", 2) ) >= 207.5, "Tor version >=0.2.7.5 required, found: %s" % version self.setStatus(u"Connected (%s)" % res_auth) self.event_started.set(True) self.starting = False self.connecting = False self.conn = conn except Exception, err: self.conn = None self.setStatus(u"Error (%s)" % str(err).decode("utf8", "ignore")) self.log.error( u"Tor controller connect error: %s" % Debug.formatException(str(err).decode("utf8", "ignore"))) self.enabled = False
def connect(self): if not self.enabled: return False self.site_onions = {} self.privatekeys = {} if "socket_noproxy" in dir( socket): # Socket proxy-patched, use non-proxy one conn = socket.socket_noproxy(socket.AF_INET, socket.SOCK_STREAM) else: conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.log.debug("Connecting to %s:%s" % (self.ip, self.port)) try: with self.lock: conn.connect((self.ip, self.port)) res_protocol = self.send("PROTOCOLINFO", conn) version = re.search('Tor="([0-9\.]+)', res_protocol).group(1) # Version 0.2.7.5 required because ADD_ONION support assert float( version.replace(".", "0", 2) ) >= 207.5, "Tor version >=0.2.7.5 required, found: %s" % version # Auth cookie file cookie_match = re.search('COOKIEFILE="(.*?)"', res_protocol) if cookie_match: cookie_file = cookie_match.group(1) auth_hex = binascii.b2a_hex(open(cookie_file, "rb").read()) res_auth = self.send("AUTHENTICATE %s" % auth_hex, conn) elif config.tor_password: res_auth = self.send( 'AUTHENTICATE "%s"' % config.tor_password, conn) else: res_auth = self.send("AUTHENTICATE", conn) assert "250 OK" in res_auth, "Authenticate error %s" % res_auth self.status = u"Connected (%s)" % res_auth self.conn = conn except Exception, err: self.conn = None self.status = u"Error (%s)" % err self.log.error("Tor controller connect error: %s" % Debug.formatException(err)) self.enabled = False
def connect(self): if not self.enabled: return False self.site_onions = {} self.privatekeys = {} if "socket_noproxy" in dir(socket): # Socket proxy-patched, use non-proxy one conn = socket.socket_noproxy(socket.AF_INET, socket.SOCK_STREAM) else: conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.log.debug("Connecting to %s:%s" % (self.ip, self.port)) try: with self.lock: conn.connect((self.ip, self.port)) # Auth cookie file res_protocol = self.send("PROTOCOLINFO", conn) cookie_match = re.search('COOKIEFILE="(.*?)"', res_protocol) if cookie_match: cookie_file = cookie_match.group(1).decode("string-escape") auth_hex = binascii.b2a_hex(open(cookie_file, "rb").read()) res_auth = self.send("AUTHENTICATE %s" % auth_hex, conn) elif config.tor_password: res_auth = self.send('AUTHENTICATE "%s"' % config.tor_password, conn) else: res_auth = self.send("AUTHENTICATE", conn) assert "250 OK" in res_auth, "Authenticate error %s" % res_auth # Version 0.2.7.5 required because ADD_ONION support res_version = self.send("GETINFO version", conn) version = re.search('version=([0-9\.]+)', res_version).group(1) assert float(version.replace(".", "0", 2)) >= 207.5, "Tor version >=0.2.7.5 required, found: %s" % version self.status = u"Connected (%s)" % res_auth self.conn = conn except Exception, err: self.conn = None self.status = u"Error (%s)" % err self.log.error("Tor controller connect error: %s" % Debug.formatException(err)) self.enabled = False