Compare commits

...

3 Commits

Author SHA1 Message Date
Serafim 3e367248b6 merge dev 2025-04-28 21:30:52 +03:00
oct 39768fda38 my_udp (#18)
my_udp

Co-authored-by: Serafim <simasuh@gmail.com>
Reviewed-on: https://gitea.serafimdev.com/serafim/dos/pulls/18
Co-authored-by: oct <m0odyplus@yandex.ru>
Co-committed-by: oct <m0odyplus@yandex.ru>
2025-04-28 21:28:35 +03:00
Serafim fcf58646ec Revert "my_udp (#16)" (#20)
This reverts commit 472eff7962.

Reviewed-on: https://gitea.serafimdev.com/serafim/dos/pulls/20
Co-authored-by: Serafim <simasuh@gmail.com>
Co-committed-by: Serafim <simasuh@gmail.com>
2025-04-28 21:19:57 +03:00
1 changed files with 87 additions and 77 deletions

View File

@ -55,7 +55,6 @@ std::string log_msg; // Сообщение,
std::string fin_msg; // Сообщение, которое будет выведено в консоль пользователю
std::string msg; // Сообщение, которое будет отправлено в телеграм
int status; // Статус работы программы
// int log_status;
/*
@ -83,10 +82,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; // Счётчик для цикла
// Инициализация
@ -180,7 +179,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)
{
// Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода,
// формирует сообщение с описанием произошедшей ошибки
@ -215,15 +298,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
@ -646,69 +720,6 @@ int my_tcp_syn() {
return 0;
}
int 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;
}
// Callback для записи ответа от сервера
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
size_t total_size = size * nmemb;
@ -826,7 +837,6 @@ int main(int arg_ctr, char **arg_ptr)
status = my_check_params(); // Проверяем параметры командной строки
switch (status) // Обрабатываем результат проверки параметров
{
case 1: // Режим сканирования портов (UDP)