Добавление my_log() и скрипта build.py
This commit is contained in:
parent
472eff7962
commit
b794b1c507
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
log_path = "/var/log/DosAtk"
|
||||||
|
if not os.path.exists(log_path):
|
||||||
|
if os.getuid() == 0: # Если уже root
|
||||||
|
os.system("mkdir -p /var/log && touch /var/log/DosAtk")
|
||||||
|
os.system("chmod 666 /var/log/DosAtk")
|
||||||
|
else:
|
||||||
|
os.system("sudo mkdir -p /var/log && sudo touch /var/log/DosAtk 2>/dev/null || true")
|
||||||
|
os.system("sudo chmod 666 /var/log/DosAtk 2>/dev/null || true")
|
||||||
|
|
||||||
|
# Компиляция
|
||||||
|
if subprocess.call(["g++", "src/DosAtk.cpp", "-o", "DosAtk", "-lcurl", "-lssl", "-lcrypto"]) != 0:
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Запуск с аргументами
|
||||||
|
os.execvp("./DosAtk", ["./DosAtk"] + sys.argv[1:])
|
|
@ -27,6 +27,8 @@
|
||||||
#include <stdlib.h> // Базовые функции (C)
|
#include <stdlib.h> // Базовые функции (C)
|
||||||
#include <string.h> // Работа со строками (C)
|
#include <string.h> // Работа со строками (C)
|
||||||
#include <netinet/in.h> // Сетевые функции, интернет-адреса
|
#include <netinet/in.h> // Сетевые функции, интернет-адреса
|
||||||
|
#include <sys/stat.h> // Для создания директории mkdir
|
||||||
|
#include <fstream> // Работа с файловыми потоками
|
||||||
|
|
||||||
/*
|
/*
|
||||||
██████╗ ██████╗██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗
|
██████╗ ██████╗██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗
|
||||||
|
@ -291,7 +293,7 @@ bool is_numeric(const std::string& s)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_msg()
|
int my_msg()
|
||||||
{
|
{
|
||||||
printf("begin my_msg"); // debug
|
printf("begin my_msg"); // debug
|
||||||
|
|
||||||
|
@ -371,13 +373,79 @@ void my_msg()
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("end my_msg"); // debug
|
printf("end my_msg"); // debug
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
int my_log()
|
int my_log()
|
||||||
{
|
{
|
||||||
// Данная функция записывает в файл лога сообщение
|
// Данная функция записывает в файл лога сообщение
|
||||||
printf("start my_log"); // debug
|
printf("start my_log\n"); // debug
|
||||||
printf("end my_log"); // debug
|
|
||||||
|
// === Объявление локальных переменных ===
|
||||||
|
std::ofstream log_stream; // Поток для работы с файлом
|
||||||
|
std::string current_log_name; // Текущее имя лог-файла
|
||||||
|
struct stat file_stat; // Информация о файле
|
||||||
|
std::chrono::system_clock::time_point now; // Текущее время
|
||||||
|
std::time_t now_time_t; // Время в time_t
|
||||||
|
std::tm now_tm; // Время в tm структуре
|
||||||
|
char time_buf[20]; // Буфер для времени
|
||||||
|
std::string rotated_log_name; // Новое имя файла при ротации
|
||||||
|
int stat_result; // Результат проверки stat
|
||||||
|
std::chrono::milliseconds ms; // Миллисекунды
|
||||||
|
|
||||||
|
const size_t max_log_size = 10485760; // Лимит размера лога (10MB)
|
||||||
|
|
||||||
|
// === Инициализация переменных ===
|
||||||
|
now = std::chrono::system_clock::now();
|
||||||
|
now_time_t = std::chrono::system_clock::to_time_t(now);
|
||||||
|
localtime_r(&now_time_t, &now_tm);
|
||||||
|
memset(time_buf, 0, sizeof(time_buf));
|
||||||
|
strftime(time_buf, sizeof(time_buf), "%Y%m%d_%H%M%S", &now_tm);
|
||||||
|
current_log_name = log_file;
|
||||||
|
rotated_log_name = log_file + "_" + time_buf;
|
||||||
|
memset(&file_stat, 0, sizeof(file_stat));
|
||||||
|
stat_result = stat(log_file.c_str(), &file_stat);
|
||||||
|
ms = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
|
now.time_since_epoch()) % 1000;
|
||||||
|
|
||||||
|
// === Основная логика ===
|
||||||
|
// Если путь к лог-файлу не указан
|
||||||
|
if(log_file.empty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Открытие файла в режиме добавления
|
||||||
|
log_stream.open(log_file, std::ios::app | std::ios::ate);
|
||||||
|
|
||||||
|
// Проверка успешности открытия файла
|
||||||
|
if(!log_stream.is_open()) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запись сообщения в лог
|
||||||
|
log_stream << "[" << std::put_time(&now_tm, "%Y-%m-%d %H:%M:%S")
|
||||||
|
<< "." << std::setfill('0') << std::setw(3) << ms.count() << "] "
|
||||||
|
<< log_msg << std::endl;
|
||||||
|
|
||||||
|
// Проверка размер файла и выполняем ротацию
|
||||||
|
if(stat_result == 0 && file_stat.st_size > max_log_size) {
|
||||||
|
log_stream.close(); // Закрываем файл перед ротацией
|
||||||
|
|
||||||
|
// Переименование файла
|
||||||
|
if(rename(log_file.c_str(), rotated_log_name.c_str()) != 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Открытие нового лог-файла
|
||||||
|
log_stream.open(log_file, std::ios::app);
|
||||||
|
if(!log_stream.is_open()) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log_stream.close();
|
||||||
|
|
||||||
|
printf("end my_log\n"); // debug
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,7 +455,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; // Компонента секунд времени завершения
|
||||||
|
@ -450,15 +518,15 @@ int my_tcp_syn() {
|
||||||
printf("start my_tcp_syn"); // debug
|
printf("start my_tcp_syn"); // debug
|
||||||
|
|
||||||
// === Объявление локальных переменных ===
|
// === Объявление локальных переменных ===
|
||||||
int sock; // Основной raw-сокет для отправки пакетов
|
int sock; // Основной raw-сокет для отправки пакетов
|
||||||
int one; // Флаг для setsockopt
|
int one; // Флаг для setsockopt
|
||||||
// Структуры для адресов
|
// Структуры для адресов
|
||||||
struct sockaddr_in target_addr; // Адрес цели
|
struct sockaddr_in target_addr; // Адрес цели
|
||||||
// Параметры подключения
|
// Параметры подключения
|
||||||
uint16_t target_port; // Порт цели (в сетевом порядке байт)
|
uint16_t target_port; // Порт цели (в сетевом порядке байт)
|
||||||
// Структуры заголовков
|
// Структуры заголовков
|
||||||
struct iphdr ip_header; // IP-заголовок пакета
|
struct iphdr ip_header; // IP-заголовок пакета
|
||||||
struct tcphdr tcp_header; // TCP-заголовок пакета
|
struct tcphdr tcp_header; // TCP-заголовок пакета
|
||||||
// Псевдозаголовок для контрольной суммы
|
// Псевдозаголовок для контрольной суммы
|
||||||
struct {
|
struct {
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
@ -468,8 +536,8 @@ int my_tcp_syn() {
|
||||||
uint16_t tcp_len;
|
uint16_t tcp_len;
|
||||||
} pseudo_header;
|
} pseudo_header;
|
||||||
// Буферы данных
|
// Буферы данных
|
||||||
char temp_buf[sizeof(pseudo_header) + sizeof(tcphdr)]; // Буфер для контрольной суммы
|
char temp_buf[sizeof(pseudo_header) + sizeof(tcphdr)]; // Буфер для контрольной суммы
|
||||||
char packet[sizeof(iphdr) + sizeof(tcphdr)]; // Итоговый пакет
|
char packet[sizeof(iphdr) + sizeof(tcphdr)]; // Итоговый пакет
|
||||||
|
|
||||||
// Переменные для встроенного расчета контрольной суммы
|
// Переменные для встроенного расчета контрольной суммы
|
||||||
uint16_t *checksum_ptr;
|
uint16_t *checksum_ptr;
|
||||||
|
@ -573,18 +641,17 @@ int my_tcp_syn() {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
close(sock);
|
close(sock);
|
||||||
printf("end my_tcp_syn"); // debug
|
printf("end my_tcp_syn"); // debug
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void my_udp() {
|
int my_udp() {
|
||||||
// Выполняет UDP портовое сканирование well-known портов
|
// Выполняет UDP портовое сканирование well-known портов
|
||||||
int status;
|
int status;
|
||||||
int sockfd; // Дескриптор сокета
|
int sockfd; // Дескриптор сокета
|
||||||
struct sockaddr_in target_addr; // Адрес цели
|
struct sockaddr_in target_addr; // Адрес цели
|
||||||
static int port_idx; // Текущий индекс порта
|
static int port_idx; // Текущий индекс портаS
|
||||||
static const int ports[]; // Список портов
|
static const int ports[]; // Список портов
|
||||||
static const int ports_total;
|
static const int ports_total;
|
||||||
int curr_port; // Текущий порт
|
int curr_port; // Текущий порт
|
||||||
|
|
Loading…
Reference in New Issue