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++
|
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
|
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;
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -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;
|
||||||
}
|
}
|
|
@ -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);
|
Loading…
Reference in New Issue