forked from serafim/dos
1
0
Fork 0

my_check_params beta v0.2

This commit is contained in:
tieshagr 2025-03-06 04:39:43 +03:00
parent 7493c803fa
commit 2b79163781
5 changed files with 65 additions and 32 deletions

View File

@ -1,14 +1,14 @@
CXX = g++ CXX = g++
CXXFLAGS = -Iinclude/ CXXFLAGS = -Iinclude/
all: my_app all: dos
# Сюда дописывать файлики для компиляции # Сюда дописывать файлики для компиляции
my_app: dos:
$(CXX) $(CXXFLAGS) ./main.cpp ./parser.cpp -o my_app $(CXX) $(CXXFLAGS) ./main.cpp ./my_check_params.cpp -o dos
rebuild: rebuild:
rm -f my_app && make my_app rm -f ./dos && make dos
clean: clean:
rm -f my_app rm -f ./dos

View File

@ -1,14 +1,15 @@
#include "parser.hpp" #include "my_check_params.hpp"
Options opts;
using namespace std; using namespace std;
// Компиляция из директории вызвать команду make my_app // Компиляция из директории вызвать команду make my_app
// Запуск: ./my_app [флаги и аргументы к ним] (начать можно с флага --help) // Запуск: ./my_app [флаги и аргументы к ним] (начать можно с флага --help)
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
Options opts;
int error = parse_params(argc, argv, opts); int error = my_check_params(argc, argv);
if (!error) if (error > 0)
{ {
if (opts.attack_type == "flood") { if (opts.attack_type == "flood") {
cout << "type attack: " << opts.attack_type << "\n"; cout << "type attack: " << opts.attack_type << "\n";
@ -34,6 +35,9 @@ int main(int argc, char *argv[]) {
} }
else {
cout << "err code:" << error << "\n";
}

BIN
src/my_app Executable file

Binary file not shown.

View File

@ -1,4 +1,4 @@
#include "parser.hpp" #include "my_check_params.hpp"
// Гарантируется наличие минимума нужных аргументов для flood и scan // Гарантируется наличие минимума нужных аргументов для flood и scan
// Гарантируется, что после работы парсера мы получим только валидный тип атаки // Гарантируется, что после работы парсера мы получим только валидный тип атаки
@ -6,9 +6,19 @@
// Добавить: // Добавить:
// 1. Валидацию IP, port // 1. Валидацию IP, port
// Статус коды:
// 2 - Атака флуд, все нужные опции есть
// 1 - Атака порт скан, все нужные опции есть
// 0 - нужна помощь
// -1 - пользователь не ввел тип атаки или ввел неверный тип атаки
// -10 - Пользователь выбрал тип атаки порт сканнинг, но не ввел нужные параметры
// -20 - Пользователь выбрал тип атаки флуд, но не ввел нужные параметры
// -100 - неизвестная ошибка
// -101 - неизвестная опция, следует предложить вызвать флаг помощи
// Какие-то еще коды?
int my_check_params(int argc, char** argv) {
int status = -100;
int parse_params(int argc, char** argv, Options& opts) {
// Короткие опции (с двоеточием для параметров) // Короткие опции (с двоеточием для параметров)
const char* short_options = "a:d:i:p:l:t:b:h"; const char* short_options = "a:d:i:p:l:t:b:h";
@ -60,32 +70,48 @@ int parse_params(int argc, char** argv, Options& opts) {
<< " -l, --log FILE Log file\n" << " -l, --log FILE Log file\n"
<< " -t, --telegram ID Telegram ID\n" << " -t, --telegram ID Telegram ID\n"
<< " -b, --token TOKEN Telegram bot token\n"; << " -b, --token TOKEN Telegram bot token\n";
return 1; status = 0;
break;
case '?': case '?':
std::cerr << "Unknown option!\n.--help for info\n"; std::cerr << "Unknown option!\n.--help for info\n";
return 1; status = -101;
break;
default: default:
return 1; status = -100;
break;
} }
} }
// Проверка обязательных параметров // Проверка обязательных параметров
if (opts.attack_type.empty()) {
std::cerr << "Error: Missing required parameters!\n--help for more info\n"; if (status != 0)
return 1; {
} if (opts.attack_type != "flood" && opts.attack_type != "scan") {
else if (opts.attack_type != "flood" && opts.attack_type != "scan"){ std::cerr << "Error: Missing required parameters!\n--help for more info\n";
std::cerr << "Error: Only scan or flood type of attack!\n--help for more info\n"; status = -1;
return 1; }
} else if (opts.attack_type == "scan" && (opts.domain.empty() || opts.ip.empty())) {
else if (opts.attack_type == "flood" && (opts.domain.empty() || opts.ip.empty() || opts.port.empty())) { std::cerr << "Error: Missing required parameters!\n--help for more info\n";
std::cerr << "Error: Missing required parameters!\n--help for more info\n"; status = -10;
return 1; }
} else if (opts.attack_type == "flood" && (opts.domain.empty() || opts.ip.empty() || opts.port.empty())) {
else if (opts.attack_type == "scan" && (opts.domain.empty() || opts.ip.empty())) { std::cerr << "Error: Missing required parameters!\n--help for more info\n";
std::cerr << "Error: Missing required parameters!\n--help for more info\n"; status = -20;
return 1; }
else if (opts.attack_type == "scan" && !opts.domain.empty() && !opts.ip.empty()) {
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
status = 1;
}
else if (opts.attack_type == "flood" && !opts.domain.empty() && !opts.ip.empty() && !opts.port.empty()) {
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
status = 2;
}
// Какие-то еще коды?
} }
return 0;
return status;
} }

View File

@ -5,6 +5,7 @@
#include <unistd.h> #include <unistd.h>
#include <getopt.h> // Для struct option #include <getopt.h> // Для struct option
struct Options { struct Options {
std::string attack_type; // Обязательный параметр std::string attack_type; // Обязательный параметр
std::string domain; // Обязательный параметр std::string domain; // Обязательный параметр
@ -15,5 +16,7 @@ struct Options {
std::string telegram_token; // Не обязательный параметр std::string telegram_token; // Не обязательный параметр
}; };
extern Options opts; // Теперь это глобальная переменная, где она должна определяться?
// Прототип функции парсинга // Прототип функции парсинга
int parse_params(int argc, char** argv, Options& opts); int my_check_params(int argc, char** argv);