diff --git a/src/DosAtk.cpp b/src/DosAtk.cpp index 9ca946f..41825a6 100644 --- a/src/DosAtk.cpp +++ b/src/DosAtk.cpp @@ -22,23 +22,25 @@ std::chrono::system_clock::time_point start_timestamp; // Начальное в std::string log_msg; // Сообщение, которое будет записано в лог-файл std::string fin_msg; // Сообщение, которое будет выведено в консоль пользователю std::string msg; // Сообщение, которое будет отправлено в телеграм +int status; // Статус работы программы // ====== end of DCL ====== // -// Данная процедура записывает в глобальные переменные параметры -// (attack_type, domain, ip, port, log_file, telegram_id, telegram_token) проводимой атаки, поступившие при вызове программы -// На вход получает int argc, char **argv, возвращает код выполнения -// Коды возврата: -// 2 - Атака флуд, все нужные опции есть -// 1 - Атака порт скан, все нужные опции есть -// 0 - нужна помощь -// -1 - пользователь не ввел тип атаки или ввел неверный тип атаки -// -10 - Пользователь выбрал тип атаки порт сканнинг, но не ввел нужные параметры -// -20 - Пользователь выбрал тип атаки флуд, но не ввел нужные параметры -// -101 - неизвестная опция или потерян аргумент, следует предложить вызвать флаг помощи -// -600 - пользователь ввел токен, но не id или наоборот int my_check_params(int argc, char **argv) { + // Данная процедура записывает в глобальные переменные параметры + // (attack_type, domain, ip, port, log_file, telegram_id, telegram_token) проводимой атаки, поступившие при вызове программы + // На вход получает int argc, char **argv, возвращает код выполнения + // Коды возврата: + // 2 - Атака флуд, все нужные опции есть + // 1 - Атака порт скан, все нужные опции есть + // 0 - нужна помощь + // -1 - пользователь не ввел тип атаки или ввел неверный тип атаки + // -10 - Пользователь выбрал тип атаки порт сканнинг, но не ввел нужные параметры + // -20 - Пользователь выбрал тип атаки флуд, но не ввел нужные параметры + // -101 - неизвестная опция или потерян аргумент, следует предложить вызвать флаг помощи + // -600 - пользователь ввел токен, но не id или наоборот + int status; int opt; const char* short_options; @@ -132,12 +134,13 @@ int my_check_params(int argc, char **argv) return status; } -// Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода, -// формирует сообщение с описанием произошедшей ошибки -void my_diag(int status) +void my_diag() { + // Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода, + // формирует сообщение с описанием произошедшей ошибки + // Отладочный вывод - начало работы функции (можно отключить в релизной версии) - printf("begin my_diag (status: %i)\n", status); // debug + printf("begin my_diag, status: %i\n", status); // debug // Выбор сообщения в зависимости от кода ошибки switch (status) { @@ -196,8 +199,9 @@ std::string escape_json(const std::string& s) { return result; // Возвращаем обработанную строку } -// Проверка, является ли строка числом (включая отрицательные) bool is_numeric(const std::string& s) { + // Проверка, является ли строка числом (включая отрицательные) + size_t start; // Индекс, с которого начинать проверку цифр if (s.empty()) return false; // Пустая строка не может быть числом @@ -219,7 +223,8 @@ bool is_numeric(const std::string& s) { } int my_msg() { - // Инициализация переменных для работы с CURL + // Инициализация локальных переменных для работы с CURL + CURL* curl; // Указатель на CURL-объект std::string escaped_msg; // Экранированное сообщение для JSON std::cout << msg << std::endl; // Вывод сообщения в консоль (для отладки) @@ -291,15 +296,17 @@ int my_msg() { return 4; // Прочие ошибки } } -// Данная функция записывает в файл лога сообщение + int my_log() { + // Данная функция записывает в файл лога сообщение return 0; } -// Данная функция завершает программу и рассчитывает итоговое время выполнения программы void my_fin() { + // Данная функция завершает программу и рассчитывает итоговое время выполнения программы + // Фиксируем время окончания работы программы auto end_timestamp = std::chrono::system_clock::now(); // Преобразуем время окончания в time_t и миллисекунды @@ -340,29 +347,29 @@ void my_fin() std::exit(0); } -// Данная процедура сопостовляет доменное имя с IP int my_dns() { + // Данная процедура сопостовляет доменное имя с IP return 0; } -// Данная процедура выполняет TCP SYN Flood атаку int my_tcp_syn() { + // Данная процедура выполняет TCP SYN Flood атаку return 2; } -// Данная процедура выполняет UDP Flood (port scanning) атаку int my_udp() { + // Данная процедура выполняет UDP Flood (port scanning) атаку return 2; } -// Главная функция программы - точка входа int main(int argc, char **argv) { + // Главная функция программы - точка входа + // Объявление переменных для хранения статусов операций - int check_params_status; // Статус проверки параметров int log_status; // Статус записи в лог int dns_status; // Статус DNS-разрешения int udp_status; // Статус UDP-атаки @@ -372,6 +379,7 @@ int main(int argc, char **argv) n_ok_requests = 0; // Счетчик успешных запросов n_fail_requests = 0; // Счетчик неудачных запросов start_timestamp = std::chrono::system_clock::now(); // Засекаем время начала + status = 0; // Статус программы // Получаем текущее время в различных форматах time_t now_time_t = std::chrono::system_clock::to_time_t(start_timestamp); @@ -390,10 +398,10 @@ int main(int argc, char **argv) // ====== Основная логика программы ====== // // 1. Проверяем параметры командной строки - check_params_status = my_check_params(argc, argv); + status = my_check_params(argc, argv); // Обрабатываем результат проверки параметров - switch (check_params_status) + switch (status) { case 1: // Режим сканирования портов (UDP) // Пытаемся разрешить DNS (если указано доменное имя) @@ -410,7 +418,8 @@ int main(int argc, char **argv) } else if (udp_status < 0) // Обработка ошибок { - my_diag(udp_status); // Выводим диагностику + status = udp_status; + my_diag(); // Выводим диагностику log_status = my_log(); // Пытаемся записать в лог if (log_status == 1) // Если требуется уведомление { @@ -425,7 +434,7 @@ int main(int argc, char **argv) } else if (dns_status == 1) // Ошибка DNS-разрешения { - my_diag(check_params_status); // Выводим ошибку + my_diag(); // Выводим ошибку log_status = my_log(); // Логируем ошибку if (log_status == 0) { // Если не требуется уведомление @@ -453,7 +462,8 @@ int main(int argc, char **argv) } else if (tcp_syn_status < 0) { - my_diag(tcp_syn_status); + status = tcp_syn_status; + my_diag(); log_status = my_log(); if (log_status == 1) { @@ -467,7 +477,7 @@ int main(int argc, char **argv) } else if (dns_status == 1) { - my_diag(check_params_status); + my_diag(); log_status = my_log(); if (log_status == 0) { @@ -482,7 +492,7 @@ int main(int argc, char **argv) break; default: // Некорректные параметры или запрос справки - my_diag(check_params_status); // Выводим диагностику + my_diag(); // Выводим диагностику log_status = my_log(); // Логируем событие if (log_status == 0) // Без уведомления