fix: ip validation #29 #30

Merged
serafim merged 1 commits from fix/ip-validation into dev 2025-05-11 16:17:59 +03:00
1 changed files with 55 additions and 4 deletions

View File

@ -87,8 +87,14 @@ int my_check_params()
const char* short_options; // Сокращения для параметров
struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры
int i; // Счётчик для цикла
std::string token;
bool is_valid_ip;
int count;
// Инициализация
count = 0;
is_valid_ip = true;
token = "";
ms = std::chrono::duration_cast<std::chrono::milliseconds>(start_timestamp.time_since_epoch()) % 1000;
opt = -1;
short_options = "a:d:i:p:l:t:b:h";
@ -165,6 +171,45 @@ int my_check_params()
}
}
std::istringstream ss(ip);
while (std::getline(ss, token, '.')) {
// Check number of parts
if (++count > 4) {
is_valid_ip = false;
break;
};
// Check if token is a number
if (token.empty() || token.size() > 3) {
is_valid_ip = false;
break;
};
for (char c : token) {
if (!isdigit(c)) {
is_valid_ip = false;
break;
};
}
int num = std::stoi(token);
if (num < 0 || num > 255) {
is_valid_ip = false;
break;
};
// Optional: Disallow leading zeros
if (token.size() > 1 && token[0] == '0') {
is_valid_ip = false;
break;
};
}
if(is_valid_ip) {
is_valid_ip = count == 4;
}
if (attack_type != "flood" && attack_type != "scan") { // Проверяем валидность типа атаки
printf("end my_check_params\n"); // debug
return -1; // Некорректный тип атаки
@ -181,13 +226,14 @@ int my_check_params()
(telegram_id.empty() && !telegram_token.empty())) { // Если указан telegram id то нужен и token
printf("end my_check_params\n"); // debug
return -600; // Неполные данные для Telegram
}
else if (attack_type == "scan") { // Если все проверки пройдены и тип атаки - сканирование
} else if(!ip.empty() && !is_valid_ip) {
printf("end my_check_params\n"); // debug
return -601; // Введён неправильный ip
} else if (attack_type == "scan") { // Если все проверки пройдены и тип атаки - сканирование
log_msg += " | Type: UDP port scan";
printf("end my_check_params\n"); // debug
return 1; // Валидные параметры для сканирования
}
else if (attack_type == "flood") { // Если все проверки пройдены и тип атаки - флуд
log_msg += " | Type: TCP SYN flood";
printf("end my_check_params\n"); // debug
@ -330,9 +376,13 @@ void my_diag()
log_msg += " | Error: Unknown option";
break;
case -600: // Неполные данные для Telegram-уведомлений
printf("Error: To use telegram integration both telegram_id and telegram_token have to be provided!\n.--help for info\n");
printf("Error: To use telegram integration both telegram_id and telegram_token have to be provided!\n--help for info\n");
log_msg += " | Error: To use telegram integration both telegram_id and telegram_token have to be provided";
break;
case -601: // Неверный ip
printf("Error: Invalid ip address!\n--help for info\n");
log_msg += " | Error: Invalid ip address provided by user";
break;
}
printf("end my_diag\n"); // debug
@ -1038,6 +1088,7 @@ int main(int arg_ctr, char **arg_ptr)
case -20:
case -101:
case -600:
case -601:
my_diag(); // Выводим диагностику
status = my_log(); // Логируем событие