This commit is contained in:
oct 2025-04-08 01:08:24 +00:00
parent fd8c226de9
commit d14bac3a14
1 changed files with 77 additions and 6 deletions

View File

@ -9,6 +9,13 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
// ====== DCL ====== // // ====== DCL ====== //
@ -25,6 +32,10 @@ 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;
extern const char* global_ip;
extern int status;
extern int n_ok_requests;
extern int n_fail_requests;
int my_check_params(int argc, char **argv) int my_check_params(int argc, char **argv)
{ {
@ -109,6 +120,62 @@ int my_check_params(int argc, char **argv)
return status; return status;
} }
void my_udp() {
// Выполняет UDP портовое сканирование well-known портов
int sockfd = -1; // Дескриптор сокета
struct sockaddr_in target_addr; // Адрес цели
static int port_idx = 0; // Текущий индекс порта
static const int ports[] = { // Список портов
53, 67, 68, 69, 123, 161, 162, 389, 443, 500, 514, 520, 1900, 4500
};
static const int ports_total = sizeof(ports)/sizeof(ports[0]);
int curr_port = ports[port_idx]; // Текущий порт
const char dummy_data[] = "SCAN"; // Данные для отправки
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
goto cleanup;
}
// Создание сокета
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sockfd < 0) {
n_fail_requests++;
status = -502; // Ошибка создания сокета
goto cleanup;
}
// Отправка данных
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;
cleanup:
if (sockfd != -1) close(sockfd);
}
void my_diag(int status) void my_diag(int status)
{ {
printf("begin my_diag (status: %i)\n", status); printf("begin my_diag (status: %i)\n", status);
@ -141,6 +208,15 @@ void my_diag(int status)
case -600: case -600:
printf("Error: To use telegram integration both telegram_id and telegram_token have to be provided!\n.--help for info\n"); printf("Error: To use telegram integration both telegram_id and telegram_token have to be provided!\n.--help for info\n");
break; 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"); printf("end my_diag\n");
} }
@ -199,11 +275,6 @@ int my_tcp_syn()
return 2; return 2;
} }
int my_udp()
{
return 2;
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int check_params_status; int check_params_status;
@ -237,7 +308,7 @@ int main(int argc, char **argv)
dns_status = my_dns(); dns_status = my_dns();
if (dns_status == 0) if (dns_status == 0)
{ {
while (udp_status = my_udp()) while (true)
{ {
if (udp_status == 2) if (udp_status == 2)
{ {