def tags(ip): """ Отображение всех задач по сканированию, связанных с IP-адресом Возможность назначить тег для IP адреса, а также отметить как важный хост :param ip: ip-адрес хоста :return: переадресания лиюо отображение страницы """ host_discovery_ip = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="result")) data_all = host_discovery_ip.get_message({"host": ip}) host_discovery_tag = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="HostDiscovery", collection="result")) data_tag = host_discovery_tag.get_message({"ip": ip}) if request.method == 'POST': tag_get = request.form.get("tag") important = request.form.get('important') if important: important = True else: important = False host_discovery_post_tag = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="HostDiscovery", collection="result")) host_discovery_post_tag.update_message({"ip": ip}, {"tag": tag_get, "important": important}) return redirect(url_for('main.inventory')) else: return render_template('tag.html', ips=ip, items=data_all, tag_items=data_tag)
def delete_data_host_discovery(host: str): """ """ try: message_mongo_host_discovery = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="HostDiscovery", collection="result")) message_mongo_scanner_result = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="result")) message_mongo_scanner_task = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="task")) message_mongo_host_discovery.delete_message({"ip": host}) message_mongo_scanner_result.delete_message({"host": host}) message_mongo_scanner_task.delete_message({"host": host}) except Exception as e: print(e)
def setting(): """ Реализация страницы настойки setting_networks, setting_data: Подключения для работы с базой данных. items_setting, items_notification: Получение всех данных из соответствующий коллекций return: Отображение страницы настройки """ setting_networks = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection="network")) setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection="notification")) return render_template('setting.html', settings=setting_networks.get_all_message(), notification=setting_data.get_all_message())
def setting_notification(): """ Добавление настроек для оповещения. Метод добавления POST Сохранение данных осуществляется в БД Mongo Метод GET для отображения страницы оповещения Поддерживается возможность оповещения по email и в telegram канал, при помощи бота telegram: bot api chat_id: id канала в Telegram email: email пользователя """ if request.method == 'POST': telegram = request.form.get('telegram') chat_id = request.form.get('chat_id') email = request.form.get('email') data = { "telegram_bot_api": telegram, "telegram_chat_id": chat_id, "email": email, } setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection="notification")) setting_data.insert_message(message=data) return redirect(url_for('main.setting')) else: return render_template('network_notification.html')
def table_KB(): """ """ message_KB = MessageProducer(MongoDriver(host='localhost', port=27017, base="vulndb", collection="cve")) return message_KB.get_message_limit(50)
def setting_network(): """ Добавление настроек сети. Метод добавления POST Сохранение данных осуществляется в БД Mongo Метод GET для отображения страницы настроек сети """ if request.method == 'POST': network = request.form.get('network') interface = request.form.get('interface') description = request.form.get('description') private = request.form.get('private') telegram = request.form.get('telegram') mail = request.form.get('mail') if private is None: private = "Open Network" else: private = "Private Network" name = { "network": network } data = { "interface": interface, "description": description, "private": private, "telegram": telegram, "mail": mail } setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection="network")) setting_data.update_message(message=name, new_value=data) return redirect(url_for('main.setting')) else: return render_template('network.html')
def dashboard_data() -> Dict: """ Данные для построения графиков на странице /dashboard data_all_host: Количество обнаруженных хостов :return: data(Dict) """ message_all = MessageProducer( MongoDriver(host='localhost', port=27017, base="HostDiscovery", collection="result")) data_all_host = message_all.get_all_message() count = 0 for i in data_all_host: count += 1 data = { "count_host": count, "count_important_host": 2, "count_vulnerability": 43, "exploit": 2, "score": 4.7, "ports": [], "service": [], "task": [], "KB": [] } return data
def setting_network_delete(_id, col): """ удаление сведений из БД col: название колекции в БД _id: Идентификатор в БД """ setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection=col)) setting_data.delete_message({'_id': ObjectId(_id)}) return redirect(url_for('main.setting'))
def email_message(): """ Оправка сообщения на email ... доработка """ notifications_data = MessageProducer( MongoDriver(host='localhost', port=27017, base="setting", collection="notifications"))
def get_uuid(self) -> None: """ return: результат из базы данных """ scanner_data = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="result")) return scanner_data.get_message(message={"uuid": self.uuid})
def inventory(): """ Реализация страницы Host Discovery Отображение в таблице всех обнаруженных хостов в сети setting_data: Подключение к БД get_mask_ip: Получение всех сохраненных хостов в сети .... дописать """ setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection="network")) host_discovery_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="HostDiscovery", collection="result")) if request.method == 'POST': select = request.form.get('comp_select') host_discovery_task(host=select) return redirect(url_for('main.inventory')) else: return render_template('inventory.html', items=host_discovery_data.get_all_message(), net=setting_data.get_all_message())
def scheduler_host_discovery(): """ Запуск задачи на обнаружение хостов в сети. Поиск хостов осуществляется каждые 5 минут :return: None """ setting_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="setting", collection="network")) items = setting_data.get_all_message() for net in items: host_discovery_task(host=net["network"])
def get_cve_info(cve): """ """ try: cve_upper = str(cve).upper().replace(' ', '') cve_KB = MessageProducer(MongoDriver(host='localhost', port=27017, base="vulndb", collection="cve")) data = cve_KB.get_message({"cve": cve_upper}) except Exception as e: data = [] return data
def notification_message(): """ Вывод последних 10 записей из БД :return: *Storage -> Cursor Database """ notifications_data = MessageProducer( MongoDriver(host='localhost', port=27017, base="notification", collection="notifications")) data = notifications_data.get_message_limit(10) return data
def result_task(): """ История всех запущенных задач по сканированию, а также логов приложения :return: Отображение страницы с историей """ task_all = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="task")) item = task_all.get_all_message() return render_template('result.html', items=item, logs=log_file('app/logs/logging.log') )
def delete_task(uuid: str): """ Удаление информации о задаче uuid: UUID номер задачи """ try: message_mongo = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="result")) message_mongo.delete_message({"uuid": uuid}) except Exception as e: print(e)
def record_db_task(result: str, host: str): """ Запись в БД :param result: :param host: :return: """ data = {"uuid": result, "name": "Scanner", "host": host, "time": time()} message_mongo = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="task")) message_mongo.insert_message(data)
def scanner_info(uuid: str): """ Информация о задаче result_vuln: Поиск уязвимостей в соответствии с задачей(нужно исправить) Раздел следует доработать """ vuln_data = dict() scanner_data = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="result")) for dict_data in scanner_data.get_message(message={"uuid": uuid}): vuln_data = dict_data count_dir = result_count_data(DirectoryInfo(uuid)) return render_template('info.html', uid=vuln_data, info_mng=0, cntE=0, cntD=count_dir["count"], cntP=0)
def vulnerability_info(vulnerability: str): """ получение информации о CVE """ try: cve_upper = str(vulnerability).upper() message_mongo = MessageProducer( MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="vulndb", collection="cve")) data = message_mongo.get_message({"cve": cve_upper}) return data except Exception as e: print(e)
def scheduler_scanner(): """ Запуск задачи на сканирвоние важных хостов. Важные хосты настраиваются на вкладке Host Discovery -> <ip> -> Edit Host Сканирование осуществляется каждые 24 часа. :return: None """ host_discovery = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="HostDiscovery", collection="result")) items = host_discovery.get_all_message() list_ip = [] for data in items: if data["important"]: list_ip.append(data["ip"]) for net in list_ip: scan_task(net)
def scanner(): """ Информация о задачах по сканированию. Информация содержится в таблице и включает в себя: Название задачи, хост и время запуска Метод POST: для запуска задачи по сканированию host_discovery_ip: Подключение к БД data_all: Список всех записей results: id задачи в RQ Worker scan_db_task: Запись в БД (нужно исправить) :return: Отображение страницы /scanner """ host_discovery_ip = MessageProducer(MongoDriver(host=MONGO_HOST, port=MONGO_PORT, base="scanner", collection="result")) data_all = host_discovery_ip.get_all_message() if request.method == 'POST': scanner_host = request.form.get("scanner_text") scan_task(scanner_host) return render_template('scanner.html', ips='', items=data_all)
def telegram_message(message): """ Отправка сообщения в telegram :param message: Сообщение (информация об оповещении) :return: None """ try: notifications_data = MessageProducer( MongoDriver(host='localhost', port=27017, base="setting", collection="notifications")) data = notifications_data.get_all_message() for item in data: bot = item['telegram_bot_api'] chat_id = item['telegram_chat_id'] requests.get( 'https://api.telegram.org/bot{}/sendMessage'.format(bot), params=dict(chat_id=chat_id, text=message)) except Exception as e: print(e)