diff --git a/src/Makefile b/src/Makefile index cbe17c2..b2a3f9c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 \ No newline at end of file + rm -f ./dos \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index cf1ec65..bfd004a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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"; + } diff --git a/src/my_app b/src/my_app new file mode 100755 index 0000000..8d68b8b Binary files /dev/null and b/src/my_app differ diff --git a/src/parser.cpp b/src/my_check_params.cpp similarity index 54% rename from src/parser.cpp rename to src/my_check_params.cpp index 097020f..ac479f0 100644 --- a/src/parser.cpp +++ b/src/my_check_params.cpp @@ -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; } \ No newline at end of file diff --git a/src/parser.hpp b/src/my_check_params.hpp similarity index 83% rename from src/parser.hpp rename to src/my_check_params.hpp index cd8115a..3601bc1 100644 --- a/src/parser.hpp +++ b/src/my_check_params.hpp @@ -5,6 +5,7 @@ #include #include // Для 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); \ No newline at end of file +int my_check_params(int argc, char** argv); \ No newline at end of file