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++
CXXFLAGS = -Iinclude/
all: my_app
all: dos
# Сюда дописывать файлики для компиляции
my_app:
$(CXX) $(CXXFLAGS) ./main.cpp ./parser.cpp -o my_app
dos:
$(CXX) $(CXXFLAGS) ./main.cpp ./my_check_params.cpp -o dos
rebuild:
rm -f my_app && make my_app
rm -f ./dos && make dos
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;
// Компиляция из директории вызвать команду make my_app
// Запуск: ./my_app [флаги и аргументы к ним] (начать можно с флага --help)
int main(int argc, char *argv[]) {
Options opts;
int error = parse_params(argc, argv, opts);
if (!error)
int error = my_check_params(argc, argv);
if (error > 0)
{
if (opts.attack_type == "flood") {
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
// Гарантируется, что после работы парсера мы получим только валидный тип атаки
@ -6,9 +6,19 @@
// Добавить:
// 1. Валидацию IP, port
// Статус коды:
// 2 - Атака флуд, все нужные опции есть
// 1 - Атака порт скан, все нужные опции есть
// 0 - нужна помощь
// -1 - пользователь не ввел тип атаки или ввел неверный тип атаки
// -10 - Пользователь выбрал тип атаки порт сканнинг, но не ввел нужные параметры
// -20 - Пользователь выбрал тип атаки флуд, но не ввел нужные параметры
// -100 - неизвестная ошибка
// -101 - неизвестная опция, следует предложить вызвать флаг помощи
// Какие-то еще коды?
int my_check_params(int argc, char** argv) {
int parse_params(int argc, char** argv, Options& opts) {
int status = -100;
// Короткие опции (с двоеточием для параметров)
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"
<< " -t, --telegram ID Telegram ID\n"
<< " -b, --token TOKEN Telegram bot token\n";
return 1;
status = 0;
break;
case '?':
std::cerr << "Unknown option!\n.--help for info\n";
return 1;
status = -101;
break;
default:
return 1;
status = -100;
break;
}
}
// Проверка обязательных параметров
if (opts.attack_type.empty()) {
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
return 1;
}
else if (opts.attack_type != "flood" && opts.attack_type != "scan"){
std::cerr << "Error: Only scan or flood type of attack!\n--help for more info\n";
return 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";
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";
return 1;
if (status != 0)
{
if (opts.attack_type != "flood" && opts.attack_type != "scan") {
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
status = -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 = -10;
}
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 = -20;
}
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 <getopt.h> // Для struct option
struct Options {
std::string attack_type; // Обязательный параметр
std::string domain; // Обязательный параметр
@ -15,5 +16,7 @@ struct Options {
std::string telegram_token; // Не обязательный параметр
};
extern Options opts; // Теперь это глобальная переменная, где она должна определяться?
// Прототип функции парсинга
int parse_params(int argc, char** argv, Options& opts);
int my_check_params(int argc, char** argv);