示例#1
0
def set_default_proxy(proxy_type=None,
                      addr=None,
                      port=None,
                      rdns=True,
                      username=None,
                      password=None):
    """
    set_default_proxy(proxy_type, addr[, port[, rdns[, username, password]]])

    Sets a default proxy which all further socksocket objects will use,
    unless explicitly changed. All parameters are as for socket.set_proxy().
    """
    proxy_type = utils.bytes2str_only(proxy_type)
    addr = utils.to_str(addr)
    if isinstance(port, bytes):
        port = int(utils.to_str(port))
    else:
        port = int(port)
    username = utils.to_bytes(username)
    password = utils.to_bytes(password)

    if isinstance(proxy_type, str):
        proxy_type = proxy_type.lower()
        if "http" in proxy_type:
            proxy_type = PROXY_TYPE_HTTP
        elif "socks5" in proxy_type:
            proxy_type = PROXY_TYPE_SOCKS5
        elif "socks4" in proxy_type:
            proxy_type = PROXY_TYPE_SOCKS4
        else:
            raise ProxyError("unknown proxy type:%s" % proxy_type)

    socksocket.default_proxy = (proxy_type, addr, port, rdns,
                                username if username else None,
                                password if password else None)
示例#2
0
    def set_proxy(self,
                  proxy_type=None,
                  addr=None,
                  port=None,
                  rdns=True,
                  username=None,
                  password=None):
        """set_proxy(proxy_type, addr[, port[, rdns[, username[, password]]]])
        Sets the proxy to be used.

        proxy_type -    The type of the proxy to be used. Three types
                        are supported: PROXY_TYPE_SOCKS4 (including socks4a),
                        PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP
        addr -        The address of the server (IP or DNS).
        port -        The port of the server. Defaults to 1080 for SOCKS
                       servers and 8080 for HTTP proxy servers.
        rdns -        Should DNS queries be performed on the remote side
                       (rather than the local side). The default is True.
                       Note: This has no effect with SOCKS4 servers.
        username -    Username to authenticate with to the server.
                       The default is no authentication.
        password -    Password to authenticate with to the server.
                       Only relevant when username is also provided.
        """

        proxy_type = utils.bytes2str_only(proxy_type)
        addr = utils.to_str(addr)
        if isinstance(port, bytes):
            port = int(utils.to_str(port))
        else:
            port = int(port)
        username = utils.to_bytes(username)
        password = utils.to_bytes(password)

        if isinstance(proxy_type, str):
            proxy_type = proxy_type.lower()
            if "http" in proxy_type:
                proxy_type = PROXY_TYPE_HTTP
                self.resolve_dest = False
            elif "socks5" in proxy_type:
                if proxy_type == "socks5h":
                    self.resolve_dest = False
                    rdns = True
                proxy_type = PROXY_TYPE_SOCKS5
            elif "socks4" in proxy_type:
                proxy_type = PROXY_TYPE_SOCKS4
            else:
                raise ProxyError("unknown proxy type:%s" % proxy_type)

        self.proxy = (proxy_type, addr, port, rdns,
                      username if username else None,
                      password if password else None)
示例#3
0
    def log(self, level, console_color, html_color, fmt, *args, **kwargs):
        args = utils.bytes2str_only(args)
        now = datetime.now()
        time_str = now.strftime("%Y-%m-%d %H:%M:%S.%f")[:23]
        string = '%s - [%s] %s\n' % (time_str, level, fmt % args)
        self.buffer_lock.acquire()
        try:
            try:
                console_string = '%s [%s][%s] %s\n' % (time_str, self.name,
                                                       level, fmt % args)

                self.set_console_color(console_color)
                sys.stderr.write(console_string)
                self.set_console_color(self.reset_color)
            except:
                pass

            if self.log_fd:
                self.log_fd.write(string)
                try:
                    self.log_fd.flush()
                except:
                    pass

                self.file_size += len(string)
                if self.file_size > self.file_max_size:
                    self.log_fd.close()
                    self.log_fd = None
                    self.roll_log()
                    self.log_fd = open(self.log_filename, "w")
                    self.file_size = 0

            if self.buffer_size:
                self.last_no += 1
                self.buffer[self.last_no] = string
                buffer_len = len(self.buffer)
                if buffer_len > self.buffer_size:
                    del self.buffer[self.last_no - self.buffer_size]
        except Exception as e:
            string = '%s - [%s]LOG_EXCEPT: %s, Except:%s<br> %s' % (time.ctime(
            )[4:-5], level, fmt % args, e, traceback.format_exc())
            self.last_no += 1
            self.buffer[self.last_no] = string
            buffer_len = len(self.buffer)
            if buffer_len > self.buffer_size:
                del self.buffer[self.last_no - self.buffer_size]
        finally:
            self.buffer_lock.release()