Beispiel #1
0
class Request:
    """Handle a way we use request
    """
    def __init__(self):
        """Initialize info for Request"""
        cfg = Config("cuckoomx")
        self.machines = cfg.cuckoomx.get("machines")
        self.api_url = cfg.cuckoo.get("api_url")
        self.maximum_tasks_pending = cfg.cuckoomx.get("maximum_tasks_pending")
        self.dbmx = DatabaseMX()

    def create_url(self, url):
        """Create a url analysis task

        Adds a url to the list of pending tasks. Returns the ID of the newly
        created task.
        """
        task_ids = []
        rest_url = self.api_url + "/tasks/create/url"

        while True:
            if self.dbmx.count_tasks_not_done() < self.maximum_tasks_pending:
                break
            time.sleep(1)

        for machine in self.machines.split(","):
            machine = Machine().get_available_machine(machine)
            response = requests.post(rest_url,
                                     files={"url": ("", url)},
                                     data={
                                         "priority": 1,
                                         "machine": machine
                                     })

            # Check for response.status_code
            if response.status_code != requests.codes.ok:
                log.warn("response for url \"%s\" return status_code = %s",
                         url, response.status_code)
                continue

            task_id = response.json()["task_id"]
            if not task_id:
                log.warn("response for url \"%s\" return task_id = %s", url,
                         task_id)
                return None

            task_ids.append(task_id)

        return task_ids

    def create_file(self, filename, attachment):
        """Create a file analysis task

        Adds a file to the list of pending tasks. Returns the ID of the newly created task.
        """
        task_ids = []
        rest_url = self.api_url + "/tasks/create/file"

        while True:
            if self.dbmx.count_tasks_not_done() < self.maximum_tasks_pending:
                break
            time.sleep(1)

        for machine in self.machines.split(","):
            machine = Machine().get_available_machine(machine)
            response = requests.post(rest_url,
                                     files={"file": (filename, attachment)},
                                     data={
                                         "priority": 1,
                                         "machine": machine
                                     })

            # Check for response.status_code
            if response.status_code != requests.codes.ok:
                log.warn("response for file \"%s\" return status_code = %s",
                         filename, response.status_code)
                continue

            task_id = response.json()["task_ids"]
            if not task_id:
                log.warn("response for file \"%s\" return task_id = %s",
                         filename, task_id)
                return None

            task_ids.append(task_id[0])

        return task_ids
class Request:
    """Handle a way we use request
    """
    def __init__(self):
        """Initialize info for Request"""
        cfg = Config("cuckoomx")
        self.machines = cfg.cuckoomx.get("machines")
        self.api_url = cfg.cuckoo.get("api_url")
        self.maximum_tasks_pending = cfg.cuckoomx.get("maximum_tasks_pending")
        self.dbmx = DatabaseMX()

    def create_url(self, url):
        """Create a url analysis task

        Adds a url to the list of pending tasks. Returns the ID of the newly
        created task.
        """
        task_ids = []
        rest_url = self.api_url + "/tasks/create/url"

        while True:
            if self.dbmx.count_tasks_not_done() < self.maximum_tasks_pending:
                break
            time.sleep(1)

        for machine in self.machines.split(","):
            machine = Machine().get_available_machine(machine)
            response = requests.post(
                rest_url,
                files={"url": ("", url)},
                data={
                  "priority": 1,
                  "machine": machine})

            # Check for response.status_code
            if response.status_code != requests.codes.ok:
                log.warn("response for url \"%s\" return status_code = %s",
                  url, response.status_code)
                continue

            task_id = response.json()["task_id"]
            if not task_id:
                log.warn("response for url \"%s\" return task_id = %s",
                  url, task_id)
                return None

            task_ids.append(task_id)

        return task_ids

    def create_file(self, filename, attachment):
        """Create a file analysis task

        Adds a file to the list of pending tasks. Returns the ID of the newly created task.
        """
        task_ids = []
        rest_url = self.api_url + "/tasks/create/file"

        while True:
            if self.dbmx.count_tasks_not_done() < self.maximum_tasks_pending:
                break
            time.sleep(1)

        for machine in self.machines.split(","):
            machine = Machine().get_available_machine(machine)
            response = requests.post(
                rest_url,
                files={"file": (filename, attachment)},
                data={
                  "priority": 1,
                  "machine": machine})

            # Check for response.status_code
            if response.status_code != requests.codes.ok:
                log.warn("response for file \"%s\" return status_code = %s",
                  filename, response.status_code)
                continue

            task_id = response.json()["task_ids"]
            if not task_id:
                log.warn("response for file \"%s\" return task_id = %s",
                  filename, task_id)
                return None
        
            task_ids.append(task_id[0])

        return task_ids