parser beta 0.1 #1
Loading…
Reference in New Issue
No description provided.
Delete Branch "nekitmilk_add_getopt"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Это не я придумал, это всё, чтобы не забраковали
@ -0,0 +1,14 @@
CXX = g++
Было бы круто sh скрипт на билд при помощи GCC
Это мейкфайл, который собирает удобно проект, запуск производится через консольную команду (сейчас ./my_app [флаги][аргументы])
Я могу написать bash скрипт, который будет запускать эту команду (1 строчка), но конкретно этот файлик нужен исключительно для нашего удобства при разработке, чтобы все быстренько собирать и пересобирать :)
Также на рисунке у нас указан компилятор g++ (сейчас он и собирает программу), в целом нет проблем использовать gcc, там кажется флаги нужно просто под плюсы настроить, но нужно определиться тогда в документах
Сейчас у Беленькой уточним, норм ли Makefile
@ -0,0 +5,4 @@
// Компиляция из директории вызвать команду make my_app
// Запуск: ./my_app [флаги и аргументы к ним] (начать можно с флага --help)
int main(int argc, char *argv[]) {
Options opts;
Опции должны быть глобальными переменными
Сделал глобальными в заголовочном файле, где должны определяться, в main.cpp?
В my_check_params
Возможно нужно будет их из структуры вынуть, это тоже спросим
@ -0,0 +8,4 @@
int parse_params(int argc, char** argv, Options& opts) {
Давай близко к схеме: my_check_params
Поправил
@ -0,0 +26,4 @@
};
int opt;
while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) {
Это кто, это откуда?
Нашёл, это круто
Что?
@ -0,0 +27,4 @@
int opt;
while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) {
switch (opt) {
Беленькая больше любит статус коды, а не буквы
А они же наверн работают как сокращениия --attach = -a тогда ничего не попишешь
Статус коды в конце функций/программ, здесь первая половина функции, какие статус коды?
@ -0,0 +49,4 @@
case 'b':
opts.telegram_token = optarg;
break;
case 'h':
Это тоже my_diag
@ -0,0 +70,4 @@
}
// Проверка обязательных параметров
if (opts.attack_type.empty()) {
Эти случаи должны возвращаться из функции в виде статус кодов. Потом в my_diag свитч кейс с этими сообщениями
Добавил основные статус коды
@ -0,0 +5,4 @@
#include <unistd.h>
#include <getopt.h> // Для struct option
struct Options {
Это нужно объявить глобальными переменными (не я придумал)
https://stackoverflow.com/a/3627979
struct Options - это просто описание структуры, откуда доставать параметры, условно тип данных
А добавь гитигнор с бинарниками и удали my_app
@ -0,0 +11,4 @@
int error = my_check_params(argc, argv);
if (error > 0)
{
if (opts.attack_type == "flood") {
тут уже можно завязываться не на опцию, а на статус код error
но это временный код, пока не важно
@ -0,0 +60,4 @@
opts.telegram_token = optarg;
break;
case 'h':
std::cout << "Usage: " << argv[0] << " [options]\n"
Вообще все выводы сунуть в my_diag в принципе его можно написать, my_check_params ничего не выводит, а только статус код возвращает
Я временно эти cout'ы поставил, просто чтобы уже видеть как это работает, потом это можно будет вынести в my_diag в соответствии со статус кодами (как только приступим его создавать)
@ -0,0 +73,4 @@
status = 0;
break;
case '?':
std::cerr << "Unknown option!\n.--help for info\n";
my_diag
@ -0,0 +76,4 @@
std::cerr << "Unknown option!\n.--help for info\n";
status = -101;
break;
default:
А сюда можно попасть?
В default? По идее нет, но это просто на всякий случай, если вдруг по какой-то причине ни одно из условий не было выполнено, то мы код -100 вернем
@ -0,0 +87,4 @@
if (status != 0)
{
if (opts.attack_type != "flood" && opts.attack_type != "scan") {
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
my_diag
В этих условиях cout'ы временны, останется только код
@ -0,0 +91,4 @@
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";
my_diag
@ -0,0 +94,4 @@
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())) {
Если у нас при типе атаки flood порт задан, а ip и domain нет, то это тоже неверная комбинация
@ -0,0 +95,4 @@
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";
my_diag
@ -0,0 +99,4 @@
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";
my_diag
@ -0,0 +103,4 @@
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";
my_diag
@ -0,0 +106,4 @@
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
status = 2;
}
// Какие-то еще коды?
Если есть telegram_id, то должен быть и token и наоборот
добавил
@ -0,0 +110,4 @@
}
Переносы
убрал
Pull request closed