Esempio n. 1
0
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
Esempio n. 2
0
    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
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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