my_udp #18
100
src/DosAtk.cpp
100
src/DosAtk.cpp
|
@ -37,8 +37,8 @@
|
||||||
╚═════╝ ╚═════╝╚══════╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════
|
╚═════╝ ╚═════╝╚══════╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int argc; // Количество аргументов при вызове программы
|
int argc; // Количество аргументов при вызове программы
|
||||||
char **argv; // Массив строк с агрументами
|
char **argv; // Массив строк с агрументами
|
||||||
std::string attack_type; // Тип атаки: scan или syn
|
std::string attack_type; // Тип атаки: scan или syn
|
||||||
std::string domain; // Доменное Имя
|
std::string domain; // Доменное Имя
|
||||||
std::string ip; // Ip жертвы
|
std::string ip; // Ip жертвы
|
||||||
|
@ -53,7 +53,6 @@ std::string log_msg; // Сообщение,
|
||||||
std::string fin_msg; // Сообщение, которое будет выведено в консоль пользователю
|
std::string fin_msg; // Сообщение, которое будет выведено в консоль пользователю
|
||||||
std::string msg; // Сообщение, которое будет отправлено в телеграм
|
std::string msg; // Сообщение, которое будет отправлено в телеграм
|
||||||
int status; // Статус работы программы
|
int status; // Статус работы программы
|
||||||
// int log_status;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
██████╗ ██████╗██╗ ██████╗ ██████╗ ██████╗ ██████╗███████╗██████╗ ██╗ ██╗██████╗ ███████╗███████╗
|
██████╗ ██████╗██╗ ██████╗ ██████╗ ██████╗ ██████╗███████╗██████╗ ██╗ ██╗██████╗ ███████╗███████╗
|
||||||
|
@ -81,10 +80,10 @@ int my_check_params()
|
||||||
|
|
||||||
//Объявление
|
//Объявление
|
||||||
std::chrono::milliseconds ms; // Количество миллисекунд от целой секунды времени начала выполнения программы
|
std::chrono::milliseconds ms; // Количество миллисекунд от целой секунды времени начала выполнения программы
|
||||||
std::time_t now_time_t; // текущее время
|
std::time_t now_time_t; // Текущее время
|
||||||
int opt; // Прочитанный параметр
|
int opt; // Прочитанный параметр
|
||||||
const char* short_options; // Сокращения для параметров
|
const char* short_options; // Сокращения для параметров
|
||||||
struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры
|
struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры
|
||||||
int i; // Счётчик для цикла
|
int i; // Счётчик для цикла
|
||||||
|
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
@ -178,7 +177,91 @@ int my_check_params()
|
||||||
return -101;
|
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)
|
||||||
{
|
{
|
||||||
// Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода,
|
// Данная функция вызывается в случае ошибки на каком-то этапе и на основании поступившего кода,
|
||||||
// формирует сообщение с описанием произошедшей ошибки
|
// формирует сообщение с описанием произошедшей ошибки
|
||||||
|
@ -253,7 +336,7 @@ std::string escape_json(const std::string& s)
|
||||||
case '\n': result += "\\n"; break; // Экранирование новой строки
|
case '\n': result += "\\n"; break; // Экранирование новой строки
|
||||||
case '\r': result += "\\r"; break; // Экранирование возврата каретки
|
case '\r': result += "\\r"; break; // Экранирование возврата каретки
|
||||||
case '\t': result += "\\t"; break; // Экранирование табуляции
|
case '\t': result += "\\t"; break; // Экранирование табуляции
|
||||||
default: result += c; break; // Все остальные символы добавляем как есть
|
default: result += c; break; // Все остальные символы добавляем как есть
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,7 +470,7 @@ void my_fin()
|
||||||
|
|
||||||
// Объявления
|
// Объявления
|
||||||
time_t end_time_t; // Время завершения выполненя программы
|
time_t end_time_t; // Время завершения выполненя программы
|
||||||
std::chrono::milliseconds duration; // Длительность выполнения программы
|
std::chrono::milliseconds duration; // Длительность выполнения программы
|
||||||
std::chrono::hours hours; // Компонента часов времени завершения
|
std::chrono::hours hours; // Компонента часов времени завершения
|
||||||
std::chrono::minutes minutes; // Компонента минут времени завершения
|
std::chrono::minutes minutes; // Компонента минут времени завершения
|
||||||
std::chrono::seconds seconds; // Компонента секунд времени завершения
|
std::chrono::seconds seconds; // Компонента секунд времени завершения
|
||||||
|
@ -759,7 +842,6 @@ int main(int arg_ctr, char **arg_ptr)
|
||||||
|
|
||||||
status = my_check_params(); // Проверяем параметры командной строки
|
status = my_check_params(); // Проверяем параметры командной строки
|
||||||
|
|
||||||
|
|
||||||
switch (status) // Обрабатываем результат проверки параметров
|
switch (status) // Обрабатываем результат проверки параметров
|
||||||
{
|
{
|
||||||
case 1: // Режим сканирования портов (UDP)
|
case 1: // Режим сканирования портов (UDP)
|
||||||
|
|
Loading…
Reference in New Issue