my_check_params beta v0.2
This commit is contained in:
parent
7493c803fa
commit
2b79163781
10
src/Makefile
10
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
|
||||
rm -f ./dos
|
12
src/main.cpp
12
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";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
Binary file not shown.
|
@ -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;
|
||||
}
|
|
@ -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);
|
Loading…
Reference in New Issue