From fcf58646ece35c7495ec58ad7a4464574bd87b4f Mon Sep 17 00:00:00 2001 From: Serafim Date: Mon, 28 Apr 2025 21:19:57 +0300 Subject: [PATCH 1/2] Revert "my_udp (#16)" (#20) This reverts commit 472eff7962630a715aa6b311b5873d02c4e2f52e. Reviewed-on: https://gitea.serafimdev.com/serafim/dos/pulls/20 Co-authored-by: Serafim Co-committed-by: Serafim --- src/DosAtk.cpp | 80 +++----------------------------------------------- 1 file changed, 4 insertions(+), 76 deletions(-) diff --git a/src/DosAtk.cpp b/src/DosAtk.cpp index e33bf19..09cd1b2 100644 --- a/src/DosAtk.cpp +++ b/src/DosAtk.cpp @@ -21,12 +21,8 @@ #include // Для struct option и getopt_long() #include // Основной заголовок libcurl #include // стандартный input output -#include // Форматированный ввод/вывод -#include // Работа с JSON -#include // Стандартный ввод/вывод (C) -#include // Базовые функции (C) -#include // Работа со строками (C) -#include // Сетевые функции, интернет-адреса +#include +#include /* ██████╗ ██████╗██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗ @@ -213,15 +209,6 @@ void my_diag() case -600: // Неполные данные для Telegram-уведомлений printf("Error: To use telegram integration both telegram_id and telegram_token have to be provided!\n.--help for info\n"); break; - case -501: - printf("Error: Invalid target IP address\n"); - break; - case -502: - printf("Error: Failed to create UDP socket\n"); - break; - case -503: - printf("Error: UDP packet send failed\n"); - break; } printf("end my_diag\n"); // debug @@ -579,67 +566,8 @@ int my_tcp_syn() { return 0; } -void my_udp() { - // Выполняет UDP портовое сканирование well-known портов - int status; - int sockfd; // Дескриптор сокета - struct sockaddr_in target_addr; // Адрес цели - static int port_idx; // Текущий индекс порта - static const int ports[]; // Список портов - static const int ports_total; - int curr_port; // Текущий порт - const char dummy_data[]; // Данные для отправки - ssize_t send_result; // Результат отправки - - // Инициализация структуры адреса - memset(&target_addr, 0, sizeof(target_addr)); - curr_port = ports[port_idx]; - dummy_data[] = "SCAN"; - target_addr.sin_family = AF_INET; - target_addr.sin_port = htons(curr_port); - ports_total = sizeof(ports)/sizeof(ports[0]) - sockfd = -1; - port_idx = 0; - ports = { // Список портов - 53, 67, 68, 69, 123, 161, 162, 389, 443, 500, 514, 520, 1900, 4500 - }; - - // Преобразование IP - if (inet_pton(AF_INET, ip, &target_addr.sin_addr) <= 0) { - n_fail_requests++; - status = -501; // Код ошибки: неверный IP - if (sockfd != -1) close(sockfd); - return status; - } - - // Создание сокета - sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (sockfd < 0) { - n_fail_requests++; - status = -502; // Ошибка создания сокета - if (sockfd != -1) close(sockfd); - return status; - } - - // Отправка данных - send_result = sendto(sockfd, dummy_data, sizeof(dummy_data), 0, - (struct sockaddr*)&target_addr, sizeof(target_addr)); - if (send_result < 0) { - n_fail_requests++; - status = -503; // Ошибка отправки - } else { - n_ok_requests++; - status = 0; // Успешная отправка - } - - // Проверка общего числа запросов - if (n_ok_requests + n_fail_requests >= 1000) { - status = 2; // Условие завершения - } - - // Переход к следующему порту - port_idx = (port_idx + 1) % ports_total; - return status; +int my_udp() { + return 0; } // Callback для записи ответа от сервера From 39768fda381a4b85907c0fdbf21fd92976d4d9dd Mon Sep 17 00:00:00 2001 From: oct Date: Mon, 28 Apr 2025 21:28:35 +0300 Subject: [PATCH 2/2] my_udp (#18) my_udp Co-authored-by: Serafim Reviewed-on: https://gitea.serafimdev.com/serafim/dos/pulls/18 Co-authored-by: oct Co-committed-by: oct --- src/DosAtk.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 91 insertions(+), 9 deletions(-) diff --git a/src/DosAtk.cpp b/src/DosAtk.cpp index 09cd1b2..af09b09 100644 --- a/src/DosAtk.cpp +++ b/src/DosAtk.cpp @@ -33,8 +33,8 @@ ╚═════╝ ╚═════╝╚══════╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════ */ -int argc; // Количество аргументов при вызове программы -char **argv; // Массив строк с агрументами +int argc; // Количество аргументов при вызове программы +char **argv; // Массив строк с агрументами std::string attack_type; // Тип атаки: scan или syn std::string domain; // Доменное Имя std::string ip; // Ip жертвы @@ -49,7 +49,6 @@ std::string log_msg; // Сообщение, std::string fin_msg; // Сообщение, которое будет выведено в консоль пользователю std::string msg; // Сообщение, которое будет отправлено в телеграм int status; // Статус работы программы -// int log_status; /* ██████╗ ██████╗██╗ ██████╗ ██████╗ ██████╗ ██████╗███████╗██████╗ ██╗ ██╗██████╗ ███████╗███████╗ @@ -77,10 +76,10 @@ int my_check_params() //Объявление std::chrono::milliseconds ms; // Количество миллисекунд от целой секунды времени начала выполнения программы - std::time_t now_time_t; // текущее время + std::time_t now_time_t; // Текущее время int opt; // Прочитанный параметр const char* short_options; // Сокращения для параметров - struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры + struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры int i; // Счётчик для цикла // Инициализация @@ -174,7 +173,91 @@ int my_check_params() return -101; } -void my_diag() +int my_udp() { + int sockfd; + int port_idx; + int curr_port; + int ports_total; + int ports[14]; + char dummy_data[5]; + + sockfd = -1; // Дескриптор сокета + struct sockaddr_in target_addr; // Адрес цели + port_idx = 0; // Текущий индекс порта + + // Выполняет UDP портовое сканирование well-known портов + + ports[0] = 53; // DNS + ports[1] = 67; // DHCP (сервер) + ports[2] = 68; // DHCP (клиент) + ports[3] = 69; // TFTP + ports[4] = 123; // NTP + ports[5] = 161; // SNMP + ports[6] = 162; // SNMP Trap + ports[7] = 389; // LDAP + ports[8] = 443; // HTTPS + ports[9] = 500; // IPSec + ports[10] = 514; // Syslog + ports[11] = 520; // RIP + ports[12] = 1900; // SSDP + ports[13] = 4500; // NAT-T + + ports_total = sizeof(ports)/sizeof(ports[0]); + curr_port = ports[port_idx]; // Текущий порт + + + // Данные для отправки + // Поэлементная инициализация + dummy_data[0] = 'S'; + dummy_data[1] = 'C'; + dummy_data[2] = 'A'; + dummy_data[3] = 'N'; + dummy_data[4] = '\0'; // Обязательный терминатор строки + + ssize_t send_result; // Результат отправки + + // Инициализация структуры адреса + memset(&target_addr, 0, sizeof(target_addr)); + target_addr.sin_family = AF_INET; + target_addr.sin_port = htons(curr_port); + + // Преобразование IP + if (inet_pton(AF_INET, global_ip, &target_addr.sin_addr) <= 0) { + n_fail_requests++; + status = -501; // Код ошибки: неверный IP + if (sockfd != -1) close(sockfd); + } + + // Создание сокета + sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sockfd < 0) { + n_fail_requests++; + status = -502; // Ошибка создания сокета + if (sockfd != -1) close(sockfd); + } + + // Отправка данных + send_result = sendto(sockfd, dummy_data, sizeof(dummy_data), 0, + (struct sockaddr*)&target_addr, sizeof(target_addr)); + if (send_result < 0) { + n_fail_requests++; + status = -503; // Ошибка отправки + } else { + n_ok_requests++; + status = 0; // Успешная отправка + } + + // Проверка общего числа запросов + if (n_ok_requests + n_fail_requests >= 1000) { + status = 2; // Условие завершения + } + + // Переход к следующему порту + port_idx = (port_idx + 1) % ports_total; + return status; +} + +void my_diag(int status) { // Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода, // формирует сообщение с описанием произошедшей ошибки @@ -240,7 +323,7 @@ std::string escape_json(const std::string& s) case '\n': result += "\\n"; break; // Экранирование новой строки case '\r': result += "\\r"; break; // Экранирование возврата каретки case '\t': result += "\\t"; break; // Экранирование табуляции - default: result += c; break; // Все остальные символы добавляем как есть + default: result += c; break; // Все остальные символы добавляем как есть } } @@ -374,7 +457,7 @@ void my_fin() // Объявления time_t end_time_t; // Время завершения выполненя программы - std::chrono::milliseconds duration; // Длительность выполнения программы + std::chrono::milliseconds duration; // Длительность выполнения программы std::chrono::hours hours; // Компонента часов времени завершения std::chrono::minutes minutes; // Компонента минут времени завершения std::chrono::seconds seconds; // Компонента секунд времени завершения @@ -687,7 +770,6 @@ int main(int arg_ctr, char **arg_ptr) status = my_check_params(); // Проверяем параметры командной строки - switch (status) // Обрабатываем результат проверки параметров { case 1: // Режим сканирования портов (UDP)