nekitmilk_compile_dev #14

Merged
serafim merged 2 commits from nekitmilk_compile_dev into dev 2025-04-17 16:18:15 +03:00
1 changed files with 52 additions and 46 deletions
Showing only changes of commit 9f0f15c1e8 - Show all commits

View File

@ -16,6 +16,13 @@
#include <net/if.h> // Определение констант сетевых интерфейсов (IFNAMSIZ) #include <net/if.h> // Определение констант сетевых интерфейсов (IFNAMSIZ)
#include <sys/ioctl.h> // Управление сокетами и интерфейсами (ioctl) #include <sys/ioctl.h> // Управление сокетами и интерфейсами (ioctl)
#include <fcntl.h> // Флаги файловых дескрипторов (fcntl) #include <fcntl.h> // Флаги файловых дескрипторов (fcntl)
#include <string> // Строки
#include <chrono> // Для работы с временем
#include <getopt.h> // Для struct option и getopt_long()
#include <curl/curl.h> // Основной заголовок libcurl
#include <iostream> // стандартный input output
#include <iomanip>
#include <nlohmann/json.hpp>
/* /*
@ -26,8 +33,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 жертвы
@ -42,6 +49,7 @@ 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;
/* /*
@ -69,31 +77,30 @@ int my_check_params()
//Объявление //Объявление
std::chrono::milliseconds ms; // Количество миллисекунд от целой секунды времени начала выполнения программы std::chrono::milliseconds ms; // Количество миллисекунд от целой секунды времени начала выполнения программы
std::time_t now_time_t; // текущее время
int opt; // Прочитанный параметр int opt; // Прочитанный параметр
const char* short_options; // Сокращения для параметров const char* short_options; // Сокращения для параметров
struct option long_options[]; // Структура, описывающая пеобходимые программе параметры struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры
int i; // Счётчик для цикла int i; // Счётчик для цикла
// Инициализация // Инициализация
ms = std::chrono::duration_cast<std::chrono::milliseconds>(start_timestamp.time_since_epoch()) % 1000; ms = std::chrono::duration_cast<std::chrono::milliseconds>(start_timestamp.time_since_epoch()) % 1000;
opt = -1; opt = -1;
short_options = "a:d:i:p:l:t:b:h"; short_options = "a:d:i:p:l:t:b:h";
long_options = long_options[0] = {"attack", required_argument, NULL, 'a'};
{ long_options[1] = {"domain", required_argument, NULL, 'd'};
{"attack", required_argument, NULL, 'a'}, long_options[2] = {"ip", required_argument, NULL, 'i'};
{"domain", required_argument, NULL, 'd'}, long_options[3] = {"port", required_argument, NULL, 'p'};
{"ip", required_argument, NULL, 'i'}, long_options[4] = {"log", required_argument, NULL, 'l'};
{"port", required_argument, NULL, 'p'}, long_options[5] = {"telegram", required_argument, NULL, 't'};
{"log", required_argument, NULL, 'l'}, long_options[6] = {"token", required_argument, NULL, 'b'};
{"telegram", required_argument, NULL, 't'}, long_options[7] = {"help", no_argument, NULL, 'h'};
{"token", required_argument, NULL, 'b'}, long_options[8] = {NULL, 0, NULL, 0};
{"help", no_argument, NULL, 'h'},
{NULL, 0, NULL, 0}
};
i = 0; i = 0;
printf("begin my_check_params"); // debug printf("begin my_check_params"); // debug
now_time_t = std::time(nullptr);
// Выводим информацию о времени запуска программы // Выводим информацию о времени запуска программы
printf("Starting DosAtk at %04d-%02d-%02d %02d:%02d:%02d.%03ld\n", // Шаблон для вывода printf("Starting DosAtk at %04d-%02d-%02d %02d:%02d:%02d.%03ld\n", // Шаблон для вывода
std::localtime(&now_time_t)->tm_year + 1900, // Год (с 1900) std::localtime(&now_time_t)->tm_year + 1900, // Год (с 1900)
@ -163,6 +170,8 @@ int my_check_params()
} }
printf("end my_check_params status: %i\n", status); // debug printf("end my_check_params status: %i\n", status); // debug
return -101;
} }
void my_diag() void my_diag()
@ -218,10 +227,10 @@ std::string escape_json(const std::string& s)
// ===== Инициализация ===== // ===== Инициализация =====
result = ""; result = "";
c = ''; c = '\0'; // пустой символ
// Проходим по каждому символу входной строки // Проходим по каждому символу входной строки
for (c : s) { for (char c : s) {
// Обрабатываем специальные символы JSON // Обрабатываем специальные символы JSON
switch (c) { switch (c) {
case '"': result += "\\\""; break; // Экранирование двойных кавычек case '"': result += "\\\""; break; // Экранирование двойных кавычек
@ -289,8 +298,8 @@ void my_msg()
chat_id_field = is_numeric(telegram_id) ? "\"chat_id\": " + telegram_id : "\"chat_id\": \"" + telegram_id + "\""; chat_id_field = is_numeric(telegram_id) ? "\"chat_id\": " + telegram_id : "\"chat_id\": \"" + telegram_id + "\"";
json_data = "{" + chat_id_field + ", \"text\": \"" + escaped_msg + "\"}"; // Сборка JSON-запроса json_data = "{" + chat_id_field + ", \"text\": \"" + escaped_msg + "\"}"; // Сборка JSON-запроса
http_code = 0; http_code = 0;
res = nullptr; res = CURLE_OK;
// Проверка наличия обязательных параметров Telegram // Проверка наличия обязательных параметров Telegram
if (telegram_token.empty() || telegram_id.empty()) if (telegram_token.empty() || telegram_id.empty())
{ {
@ -365,7 +374,7 @@ void my_fin()
// Объявления // Объявления
time_t end_time_t; // Время завершения выполненя программы time_t end_time_t; // Время завершения выполненя программы
std::chrono::duration 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; // Компонента секунд времени завершения
@ -373,12 +382,12 @@ void my_fin()
// Иницаализация // Иницаализация
end_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); end_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
duration = end_timestamp - start_timestamp; // Вычисляем продолжительность работы программы duration = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - start_timestamp); // Вычисляем продолжительность работы программы
hours = std::chrono::duration_cast<std::chrono::hours>(duration); // Разбиваем продолжительность на компоненты hours = std::chrono::duration_cast<std::chrono::hours>(duration); // Разбиваем продолжительность на компоненты
minutes = std::chrono::duration_cast<std::chrono::minutes>(duration % std::chrono::hours(1)); // Разбиваем продолжительность на компоненты minutes = std::chrono::duration_cast<std::chrono::minutes>(duration % std::chrono::hours(1)); // Разбиваем продолжительность на компоненты
seconds = std::chrono::duration_cast<std::chrono::seconds>(duration % std::chrono::minutes(1)); // Разбиваем продолжительность на компоненты seconds = std::chrono::duration_cast<std::chrono::seconds>(duration % std::chrono::minutes(1)); // Разбиваем продолжительность на компоненты
milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(duration % std::chrono::seconds(1)); // Разбиваем продолжительность на компоненты milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(duration % std::chrono::seconds(1)); // Разбиваем продолжительность на компоненты
double total_seconds double total_seconds;
printf("begin my_diag\n"); // debug printf("begin my_diag\n"); // debug
@ -416,13 +425,6 @@ void my_fin()
std::exit(status); std::exit(status);
} }
int my_dns()
{
// Данная процедура сопостовляет доменное имя с IP
printf("start my_dns"); // debug
printf("end my_dns"); // debug
}
int my_tcp_syn() { int my_tcp_syn() {
/* /*
* Отправляет TCP SYN запрос на указанный IP и порт * Отправляет TCP SYN запрос на указанный IP и порт
@ -465,13 +467,13 @@ int my_tcp_syn() {
// === Инициализация переменных === // === Инициализация переменных ===
sock = -1; sock = -1;
one = 1; one = 1;
target_addr = nullptr; memset(&target_addr, 0, sizeof(target_addr));
target_port = htons(atoi(port.c_str())); target_port = htons(atoi(port.c_str()));
ip_header = nullptr; memset(&ip_header, 0, sizeof(ip_header));
tcp_header = nullptr; memset(&tcp_header, 0, sizeof(tcp_header));
pseudo_header = nullptr; memset(&pseudo_header, 0, sizeof(pseudo_header));
temp_buf = nullptr; memset(temp_buf, 0, sizeof(temp_buf));
packet = nullptr; memset(packet, 0, sizeof(packet));
checksum_ptr = 0; checksum_ptr = 0;
checksum_sum = 0; checksum_sum = 0;
checksum_len = 0; checksum_len = 0;
@ -564,6 +566,17 @@ int my_tcp_syn() {
return 0; return 0;
} }
int my_udp() {
return 0;
}
// Callback для записи ответа от сервера
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
size_t total_size = size * nmemb;
output->append((char*)contents, total_size);
return total_size;
}
int my_dns() int my_dns()
{ {
// Данная процедура сопостовляет доменное имя с IP // Данная процедура сопостовляет доменное имя с IP
@ -644,13 +657,6 @@ int my_dns()
return status; return status;
} }
// Callback для записи ответа от сервера
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
size_t total_size = size * nmemb;
output->append((char*)contents, total_size);
return total_size;
}
/* /*
@ -690,7 +696,7 @@ int main(int arg_ctr, char **arg_ptr)
{ {
while (true) // Запускаем цикл UDP-атаки while (true) // Запускаем цикл UDP-атаки
{ {
status = my_udp() status = my_udp();
if (status == 2) // Код завершения атаки if (status == 2) // Код завершения атаки
{ {
break; break;
@ -719,7 +725,7 @@ int main(int arg_ctr, char **arg_ptr)
{ {
my_fin(); // Просто завершаем программу my_fin(); // Просто завершаем программу
} }
else if (log_status == 1) // Если лог не удалось записать else if (status == 1) // Если лог не удалось записать
{ {
my_msg(); // Отправляем сообщение my_msg(); // Отправляем сообщение
my_fin(); // Завершаем программу my_fin(); // Завершаем программу
@ -735,7 +741,7 @@ int main(int arg_ctr, char **arg_ptr)
// Запускаем цикл UDP-атаки // Запускаем цикл UDP-атаки
while (true) while (true)
{ {
status = my_tcp_syn() status = my_tcp_syn();
if (status == 2) // Код завершения атаки if (status == 2) // Код завершения атаки
{ {
break; break;
@ -764,7 +770,7 @@ int main(int arg_ctr, char **arg_ptr)
{ {
my_fin(); // Просто завершаем программу my_fin(); // Просто завершаем программу
} }
else if (log_status == 1) // Если лог не удалось записать else if (status == 1) // Если лог не удалось записать
{ {
my_msg(); // Отправляем сообщение my_msg(); // Отправляем сообщение
my_fin(); // Завершаем программу my_fin(); // Завершаем программу