parser beta 0.1 #1
10
src/Makefile
10
src/Makefile
|
@ -1,14 +1,14 @@
|
||||||
CXX = g++
|
CXX = g++
|
||||||
serafim marked this conversation as resolved
|
|||||||
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)
|
||||||
serafim
commented
Опции должны быть глобальными переменными Опции должны быть глобальными переменными
nekitmilk
commented
Сделал глобальными в заголовочном файле, где должны определяться, в main.cpp? Сделал глобальными в заголовочном файле, где должны определяться, в main.cpp?
serafim
commented
В my_check_params В my_check_params
serafim
commented
Возможно нужно будет их из структуры вынуть, это тоже спросим Возможно нужно будет их из структуры вынуть, это тоже спросим
|
|||||||
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") {
|
||||||
serafim
commented
тут уже можно завязываться не на опцию, а на статус код error тут уже можно завязываться не на опцию, а на статус код error
но это временный код, пока не важно
|
|||||||
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";
|
||||||
serafim
commented
my_diag my_diag
|
|||||||
return 1;
|
status = -101;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 1;
|
status = -100;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка обязательных параметров
|
// Проверка обязательных параметров
|
||||||
if (opts.attack_type.empty()) {
|
|
||||||
|
if (status != 0)
|
||||||
|
{
|
||||||
|
if (opts.attack_type != "flood" && opts.attack_type != "scan") {
|
||||||
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
|
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
|
||||||
serafim
commented
my_diag my_diag
nekitmilk
commented
В этих условиях cout'ы временны, останется только код В этих условиях cout'ы временны, останется только код
|
|||||||
return 1;
|
status = -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())) {
|
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";
|
||||||
serafim
commented
my_diag my_diag
|
|||||||
return 1;
|
status = -10;
|
||||||
|
}
|
||||||
|
else if (opts.attack_type == "flood" && (opts.domain.empty() || opts.ip.empty() || opts.port.empty())) {
|
||||||
serafim
commented
Если у нас при типе атаки flood порт задан, а ip и domain нет, то это тоже неверная комбинация Если у нас при типе атаки flood порт задан, а ip и domain нет, то это тоже неверная комбинация
|
|||||||
|
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
|
||||||
serafim
commented
my_diag my_diag
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
// Какие-то еще коды?
|
||||||
serafim
commented
Если есть telegram_id, то должен быть и token и наоборот Если есть telegram_id, то должен быть и token и наоборот
nekitmilk
commented
добавил добавил
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
serafim
commented
Переносы
Переносы
nekitmilk
commented
убрал убрал
|
|||||||
|
|
||||||
|
|
||||||
|
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
Было бы круто sh скрипт на билд при помощи GCC
Это мейкфайл, который собирает удобно проект, запуск производится через консольную команду (сейчас ./my_app [флаги][аргументы])
Я могу написать bash скрипт, который будет запускать эту команду (1 строчка), но конкретно этот файлик нужен исключительно для нашего удобства при разработке, чтобы все быстренько собирать и пересобирать :)
Также на рисунке у нас указан компилятор g++ (сейчас он и собирает программу), в целом нет проблем использовать gcc, там кажется флаги нужно просто под плюсы настроить, но нужно определиться тогда в документах
Сейчас у Беленькой уточним, норм ли Makefile