예제 #1
0
class XMLRPCServer:
    def __init__(self):
        self.reset()

    def reset(self):
        self.options = AttribDict(cmdLineOptions)

    def set_option(self, name, value):
        self.options[name] = value

    def get_option(self, name):
        return self.options[name]

    def get_option_names(self):
        return self.options.keys()

    def run(self):
        init(self.options, True)
        return start()

    def serve(self):
        server = SimpleXMLRPCServer(addr=("", XML_RPC_SERVER_PORT),
                                    logRequests=False,
                                    allow_none=True,
                                    encoding=UNICODE_ENCODING)
        server.register_introspection_functions()
        server.register_function(self.reset)
        server.register_function(self.set_option)
        server.register_function(self.get_option)
        server.register_function(self.get_option_names)
        server.register_function(self.run)
        server.serve_forever()
예제 #2
0
class XMLRPCServer:
    def __init__(self, port):
        self.port = port
        self.reset()

        self.server = SimpleXMLRPCServer(addr=("", self.port),
                                         logRequests=False,
                                         allow_none=True,
                                         encoding=UNICODE_ENCODING)
        for _ in dir(self):
            if _.startswith("serve"):
                continue
            if not _.startswith('_') and isinstance(getattr(self, _),
                                                    types.MethodType):
                self.server.register_function(getattr(self, _))
        logger.info("Registering RPC methods: %s" %
                    str(self.server.system_listMethods()).strip("[]"))
        self.server.register_introspection_functions()
        logger.info("Running XML-RPC server at '0.0.0.0:%d'..." % self.port)

    def reset(self):
        self.options = AttribDict(cmdLineOptions)

    def set_option(self, name, value):
        self.options[name] = value
        return value

    def get_option(self, name):
        return self.options[name]

    def get_option_names(self):
        return sorted(self.options.keys())

    def is_busy(self):
        return kb.get("busyFlag")

    def read_output(self):
        sys.stdout.seek(0)
        retval = sys.stdout.read()
        sys.stdout.truncate(0)

        if not retval and not self.is_busy():
            retval = None

        return retval

    def run(self):
        if not self.is_busy():
            init(self.options, True)
            thread = threading.Thread(target=start)
            thread.daemon = True
            thread.start()
        else:
            raise Exception, "sqlmap busy"

    def serve(self):
        self.server.serve_forever()