コード例 #1
0
def task_statistics():
    current_time = datetime.now()
    previous_year = datetime(current_time.year - 1, 1, 1)
    current_year = datetime(current_time.year, 1, 1)

    all_task = Reports.objects.count()
    task_by_current_year = Reports.objects(Q(create_date__gte=current_year) & Q(create_date__lt=current_time)).count()

    previous_month = current_time.replace(day=1, hour=0, minute=0, second=0) - timedelta(days=1)
    previous_month = previous_month.replace(day=1)
    current_month = current_time.replace(day=1, hour=0, minute=0, second=0)

    all_task = all_task
    task_by_current_month = Reports.objects(Q(create_date__gte=current_month) & Q(create_date__lt=current_time)).count()

    previous_day = current_time.replace(hour=0, minute=0, second=0) - timedelta(days=1)
    all_task = all_task
    task_by_today = Reports.objects(
        Q(create_date__gte=current_time.replace(hour=0, minute=0, second=0)) & Q(create_date__ne=current_time)).count()

    _users = Users.objects.count()

    response_content = {
        'year': {
            'all_task': all_task,
            'current_year': task_by_current_year
        },
        'month': {
            'all_task': all_task,
            'current_month': task_by_current_month
        },
        'day': {
            'all_task': all_task,
            'today': task_by_today
        },
        'user': _users
    }

    return jsonify(response_content), 200
コード例 #2
0
def revoke_tasks(task_id):
    if task_id != '':
        celery_pipe.AsyncResult(task_id).revoke(terminate=True, wait=True, timeout=10, signal='SIGKILL')
        time.sleep(3)
        celery_pipe.AsyncResult(task_id).forget()
        _reports = Reports.objects(task_id=task_id)
        for _report in _reports:
            _report.delete()
    response_content = {
        'code': '200',
        'message': 'The task has been removed!'
    }
    return jsonify(response_content), 200
コード例 #3
0
def tasks():
    scantypes = ['-sT', '-sT', '-sS', '-sA', '-sW', '-sM', '-sN', '-sF', '-sX', '-sU']

    if request.method == 'GET':
        skip = int(request.args['skip'])
        limit = int(request.args['limit'])
        sort_by = request.args['sort_by']
        sort_context = int(request.args['sort_context'])
        search = request.args['search']

        if sort_context == -1:
            sort_by = '-' + sort_by

        query = Reports.objects(user_id=session['current_user']).all().order_by(sort_by)
        if search != '':
            query = Reports.objects(user_id=session['current_user']).filter(targets__contains=search).all().order_by(
                sort_by)

        _nmap_tasks = []
        paginator = Pagination(query, skip / limit + 1, 10)
        _dbreports = paginator.items
        for _dbreport in _dbreports:
            _nmap_task = celery_pipe.AsyncResult(_dbreport['task_id'])
            _report = {
                'id': _nmap_task.id,
                'targets': _dbreport['targets'],
                'options': _dbreport['options'],
                'create_date': _dbreport['create_date'],
                'status': _nmap_task.status,
                'ready': 0
            }
            if _nmap_task.result and 'done' in _nmap_task.result:
                _report.update({'progress': float(_nmap_task.result['done'])})
            elif _nmap_task.result and 'report' in _nmap_task.result:
                _report.update({'progress': 100})
            else:
                _report.update({'progress': 0})
            if _nmap_task.status in READY_STATES:
                _report.update({'ready': 1})
            _nmap_tasks.append(_report)

        response_content = {
            'recordsTotal': Reports.objects.count(),
            'recordsFiltered': paginator.total,
            'data': _nmap_tasks
        }
        return jsonify(response_content), 200

    elif request.method == 'POST':
        data = request.get_json()

        if data['targets'] == '':
            response_content = {
                'code': '403',
                'message': 'The targets is not correct!'
            }
            return jsonify(response_content), 200

        scani = int(data.get('scanTechniques', 0))
        if data.get('ports', '') != '':
            portlist = '-p ' + data.get('ports')
        else:
            portlist = ''
        noping = '-Pn' if data.get('noping', False) else ''
        osdetect = '-O' if data.get('osDetection', False) else ''
        bannerdetect = '-sV' if data.get('bannerDetection', False) else ''
        nse_script = ''
        if data.get('scripts', '') != '':
            nse_script = '--script={0}'.format(data.get('scripts'))
        options = '{0} {1} {2} {3} {4} {5}'.format(scantypes[scani],
                                                   portlist,
                                                   noping,
                                                   osdetect,
                                                   bannerdetect,
                                                   nse_script)
        _celery_task = celery_nmap_scan.delay(targets=str(data['targets']), options=str(options))
        report = Reports(user_id=session['current_user'], task_id=_celery_task.id, targets=data['targets'],
                         options=options)
        report.save()

        response_content = {
            'code': '200',
            'message': 'Successful!'
        }
        return jsonify(response_content), 200