комменты внутрь тел функций, status

This commit is contained in:
dr-wh0 2025-03-25 14:47:46 +03:00
parent a96165b7fa
commit c79a949389
1 changed files with 42 additions and 32 deletions

View File

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