diff --git a/src/DosAtk.cpp b/src/DosAtk.cpp index 725ef8f..ecb3177 100644 --- a/src/DosAtk.cpp +++ b/src/DosAtk.cpp @@ -10,36 +10,42 @@ #include #include -// ====== DCL ====== // +std::string attack_type; // Тип атаки: scan или syn +std::string domain; // Доменное Имя +std::string ip; // Ip жертвы +std::string port; // Порт +std::string log_file; // Путь к директории для логов +std::string telegram_id; // Telegram ID для уведомлений +std::string telegram_token; // Токен бота +int n_ok_requests; // Количество успешных запросов +int n_fail_requests; // Количество не успешных запросов +std::chrono::system_clock::time_point start_timestamp; // Начальное время работы +std::string log_msg; // Сообщение, которое будет записано в лог-файл +std::string fin_msg; // Сообщение, которое будет выведено в консоль пользователю +std::string msg; // Сообщение, которое будет отправлено в телеграм -std::string attack_type; -std::string domain; -std::string ip; -std::string port; -std::string log_file; -std::string telegram_id; -std::string telegram_token; -int n_ok_requests; -int n_fail_requests; -std::chrono::system_clock::time_point start_timestamp; -std::string log_msg; -std::string fin_msg; -std::string msg; +// ====== 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) { - std::string debug_msg; - debug_msg = ""; - for (int i = 0; i < argc; i++) { - debug_msg += argv[i]; - debug_msg += " "; - } - printf("begin my_check_params (argc: %i, argv: %s)\n", argc, debug_msg.c_str()); - int status; int opt; - const char* short_options = "a:d:i:p:l:t:b:h"; - const struct option long_options[] = { + const char* short_options; + short_options = "a:d:i:p:l:t:b:h"; + const struct option long_options[] = + { {"attack", required_argument, NULL, 'a'}, {"domain", required_argument, NULL, 'd'}, {"ip", required_argument, NULL, 'i'}, @@ -51,6 +57,14 @@ int my_check_params(int argc, char **argv) {NULL, 0, NULL, 0} }; + std::string debug_msg; + debug_msg = ""; + for (int i = 0; i < argc; i++) { + debug_msg += argv[i]; + debug_msg += " "; + } + printf("begin my_check_params (argc: %i, argv: %s)\n", argc, debug_msg.c_str()); + while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) { switch (opt) { case 'a': @@ -109,6 +123,8 @@ int my_check_params(int argc, char **argv) return status; } +// Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода, +// формирует сообщение с описанием произошедшей ошибки void my_diag(int status) { printf("begin my_diag (status: %i)\n", status); @@ -145,6 +161,7 @@ void my_diag(int status) printf("end my_diag\n"); } +// Данная функция отправляет сообщение в телеграмм void my_msg() { printf("begin my_msg()\n"); @@ -152,11 +169,13 @@ void my_msg() printf("end my_msg"); } +// Данная функция записывает в файл лога сообщение int my_log() { return 0; } +// Данная функция завершает программу и рассчитывает итоговое время выполнения программы void my_fin() { auto end_timestamp = std::chrono::system_clock::now(); @@ -189,21 +208,25 @@ void my_fin() std::exit(0); } +// Данная процедура сопостовляет доменное имя с IP int my_dns() { return 0; } +// Данная процедура выполняет TCP SYN Flood атаку int my_tcp_syn() { return 2; } +// Данная процедура выполняет UDP Flood (port scanning) атаку int my_udp() { return 2; } +// Тело программы int main(int argc, char **argv) { int check_params_status; @@ -217,9 +240,11 @@ int main(int argc, char **argv) n_fail_requests = 0; start_timestamp = std::chrono::system_clock::now(); - time_t now_time_t = std::chrono::system_clock::to_time_t(start_timestamp); + time_t now_time_t; + now_time_t = std::chrono::system_clock::to_time_t(start_timestamp); - std::chrono::milliseconds ms = std::chrono::duration_cast(start_timestamp.time_since_epoch()) % 1000; + std::chrono::milliseconds ms; + ms = std::chrono::duration_cast(start_timestamp.time_since_epoch()) % 1000; printf("Starting DosAtk at %04d-%02d-%02d %02d:%02d:%02d.%03ld\n", std::localtime(&now_time_t)->tm_year + 1900,