parser beta 0.1 #1

Closed
nekitmilk wants to merge 3 commits from nekitmilk_add_getopt into dev
Collaborator
No description provided.
nekitmilk added 1 commit 2025-03-05 19:35:06 +03:00
nekitmilk scheduled this pull request to auto merge when all checks succeed 2025-03-05 19:35:17 +03:00
nekitmilk scheduled this pull request to auto merge when all checks succeed 2025-03-05 19:35:33 +03:00
serafim requested changes 2025-03-05 20:00:44 +03:00
serafim left a comment
Owner

Это не я придумал, это всё, чтобы не забраковали

Это не я придумал, это всё, чтобы не забраковали
@ -0,0 +1,14 @@
CXX = g++
Owner

Было бы круто sh скрипт на билд при помощи GCC

Было бы круто sh скрипт на билд при помощи GCC
Author
Collaborator

Это мейкфайл, который собирает удобно проект, запуск производится через консольную команду (сейчас ./my_app [флаги][аргументы])

Я могу написать bash скрипт, который будет запускать эту команду (1 строчка), но конкретно этот файлик нужен исключительно для нашего удобства при разработке, чтобы все быстренько собирать и пересобирать :)

Это мейкфайл, который собирает удобно проект, запуск производится через консольную команду (сейчас ./my_app [флаги][аргументы]) Я могу написать bash скрипт, который будет запускать эту команду (1 строчка), но конкретно этот файлик нужен исключительно для нашего удобства при разработке, чтобы все быстренько собирать и пересобирать :)
Author
Collaborator

Также на рисунке у нас указан компилятор g++ (сейчас он и собирает программу), в целом нет проблем использовать gcc, там кажется флаги нужно просто под плюсы настроить, но нужно определиться тогда в документах

Также на рисунке у нас указан компилятор g++ (сейчас он и собирает программу), в целом нет проблем использовать gcc, там кажется флаги нужно просто под плюсы настроить, но нужно определиться тогда в документах
Owner

Сейчас у Беленькой уточним, норм ли Makefile

Сейчас у Беленькой уточним, норм ли Makefile
serafim marked this conversation as resolved
@ -0,0 +5,4 @@
// Компиляция из директории вызвать команду make my_app
// Запуск: ./my_app [флаги и аргументы к ним] (начать можно с флага --help)
int main(int argc, char *argv[]) {
Options opts;
Owner

Опции должны быть глобальными переменными

Опции должны быть глобальными переменными
Author
Collaborator

Сделал глобальными в заголовочном файле, где должны определяться, в main.cpp?

Сделал глобальными в заголовочном файле, где должны определяться, в main.cpp?
Owner

В my_check_params

В my_check_params
Owner

Возможно нужно будет их из структуры вынуть, это тоже спросим

Возможно нужно будет их из структуры вынуть, это тоже спросим
src/parser.cpp Outdated
@ -0,0 +8,4 @@
int parse_params(int argc, char** argv, Options& opts) {
Owner

Давай близко к схеме: my_check_params

Давай близко к схеме: my_check_params
Author
Collaborator

Поправил

Поправил
serafim marked this conversation as resolved
src/parser.cpp Outdated
@ -0,0 +26,4 @@
};
int opt;
while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) {
Owner

Это кто, это откуда?

Это кто, это откуда?
Owner

Нашёл, это круто

Нашёл, это круто
Author
Collaborator

Что?

Что?
serafim marked this conversation as resolved
src/parser.cpp Outdated
@ -0,0 +27,4 @@
int opt;
while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) {
switch (opt) {
Owner

Беленькая больше любит статус коды, а не буквы

Беленькая больше любит статус коды, а не буквы
Owner

А они же наверн работают как сокращениия --attach = -a тогда ничего не попишешь

А они же наверн работают как сокращениия --attach = -a тогда ничего не попишешь
Author
Collaborator

Статус коды в конце функций/программ, здесь первая половина функции, какие статус коды?

Статус коды в конце функций/программ, здесь первая половина функции, какие статус коды?
serafim marked this conversation as resolved
src/parser.cpp Outdated
@ -0,0 +49,4 @@
case 'b':
opts.telegram_token = optarg;
break;
case 'h':
Owner

Это тоже my_diag

Это тоже my_diag
src/parser.cpp Outdated
@ -0,0 +70,4 @@
}
// Проверка обязательных параметров
if (opts.attack_type.empty()) {
Owner

Эти случаи должны возвращаться из функции в виде статус кодов. Потом в my_diag свитч кейс с этими сообщениями

Эти случаи должны возвращаться из функции в виде статус кодов. Потом в my_diag свитч кейс с этими сообщениями
Author
Collaborator

Добавил основные статус коды

Добавил основные статус коды
src/parser.hpp Outdated
@ -0,0 +5,4 @@
#include <unistd.h>
#include <getopt.h> // Для struct option
struct Options {
Owner

Это нужно объявить глобальными переменными (не я придумал)
https://stackoverflow.com/a/3627979

Это нужно объявить глобальными переменными (не я придумал) https://stackoverflow.com/a/3627979
Author
Collaborator

struct Options - это просто описание структуры, откуда доставать параметры, условно тип данных

struct Options - это просто описание структуры, откуда доставать параметры, условно тип данных
nekitmilk added 1 commit 2025-03-06 04:40:35 +03:00
serafim requested changes 2025-03-06 10:23:28 +03:00
serafim left a comment
Owner

А добавь гитигнор с бинарниками и удали my_app

А добавь гитигнор с бинарниками и удали my_app
@ -0,0 +11,4 @@
int error = my_check_params(argc, argv);
if (error > 0)
{
if (opts.attack_type == "flood") {
Owner

тут уже можно завязываться не на опцию, а на статус код error
но это временный код, пока не важно

тут уже можно завязываться не на опцию, а на статус код error но это временный код, пока не важно
@ -0,0 +60,4 @@
opts.telegram_token = optarg;
break;
case 'h':
std::cout << "Usage: " << argv[0] << " [options]\n"
Owner

Вообще все выводы сунуть в my_diag в принципе его можно написать, my_check_params ничего не выводит, а только статус код возвращает

Вообще все выводы сунуть в my_diag в принципе его можно написать, my_check_params ничего не выводит, а только статус код возвращает
Author
Collaborator

Я временно эти cout'ы поставил, просто чтобы уже видеть как это работает, потом это можно будет вынести в my_diag в соответствии со статус кодами (как только приступим его создавать)

Я временно эти cout'ы поставил, просто чтобы уже видеть как это работает, потом это можно будет вынести в my_diag в соответствии со статус кодами (как только приступим его создавать)
@ -0,0 +73,4 @@
status = 0;
break;
case '?':
std::cerr << "Unknown option!\n.--help for info\n";
Owner

my_diag

my_diag
@ -0,0 +76,4 @@
std::cerr << "Unknown option!\n.--help for info\n";
status = -101;
break;
default:
Owner

А сюда можно попасть?

А сюда можно попасть?
Author
Collaborator

В default? По идее нет, но это просто на всякий случай, если вдруг по какой-то причине ни одно из условий не было выполнено, то мы код -100 вернем

В 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";
Owner

my_diag

my_diag
Author
Collaborator

В этих условиях cout'ы временны, останется только код

В этих условиях 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";
Owner

my_diag

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())) {
Owner

Если у нас при типе атаки flood порт задан, а ip и domain нет, то это тоже неверная комбинация

Если у нас при типе атаки 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";
Owner

my_diag

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";
Owner

my_diag

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";
Owner

my_diag

my_diag
@ -0,0 +106,4 @@
std::cerr << "Error: Missing required parameters!\n--help for more info\n";
status = 2;
}
// Какие-то еще коды?
Owner

Если есть telegram_id, то должен быть и token и наоборот

Если есть telegram_id, то должен быть и token и наоборот
Author
Collaborator

добавил

добавил
@ -0,0 +110,4 @@
}
Owner

Переносы

Переносы
Author
Collaborator

убрал

убрал
nekitmilk added 1 commit 2025-03-06 14:59:10 +03:00
serafim closed this pull request 2025-03-24 23:48:23 +03:00

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: serafim/dos#1
No description provided.