fix: ip validation
This commit is contained in:
parent
bca0037807
commit
6041e979f4
|
@ -87,8 +87,14 @@ int my_check_params()
|
||||||
const char* short_options; // Сокращения для параметров
|
const char* short_options; // Сокращения для параметров
|
||||||
struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры
|
struct option long_options[10]; // Структура, описывающая пеобходимые программе параметры
|
||||||
int i; // Счётчик для цикла
|
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;
|
ms = std::chrono::duration_cast<std::chrono::milliseconds>(start_timestamp.time_since_epoch()) % 1000;
|
||||||
opt = -1;
|
opt = -1;
|
||||||
short_options = "a:d:i:p:l:t:b:h";
|
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") { // Проверяем валидность типа атаки
|
if (attack_type != "flood" && attack_type != "scan") { // Проверяем валидность типа атаки
|
||||||
printf("end my_check_params\n"); // debug
|
printf("end my_check_params\n"); // debug
|
||||||
return -1; // Некорректный тип атаки
|
return -1; // Некорректный тип атаки
|
||||||
|
@ -181,13 +226,14 @@ int my_check_params()
|
||||||
(telegram_id.empty() && !telegram_token.empty())) { // Если указан telegram id то нужен и token
|
(telegram_id.empty() && !telegram_token.empty())) { // Если указан telegram id то нужен и token
|
||||||
printf("end my_check_params\n"); // debug
|
printf("end my_check_params\n"); // debug
|
||||||
return -600; // Неполные данные для Telegram
|
return -600; // Неполные данные для Telegram
|
||||||
}
|
} else if(!ip.empty() && !is_valid_ip) {
|
||||||
else if (attack_type == "scan") { // Если все проверки пройдены и тип атаки - сканирование
|
printf("end my_check_params\n"); // debug
|
||||||
|
return -601; // Введён неправильный ip
|
||||||
|
} else if (attack_type == "scan") { // Если все проверки пройдены и тип атаки - сканирование
|
||||||
log_msg += " | Type: UDP port scan";
|
log_msg += " | Type: UDP port scan";
|
||||||
printf("end my_check_params\n"); // debug
|
printf("end my_check_params\n"); // debug
|
||||||
return 1; // Валидные параметры для сканирования
|
return 1; // Валидные параметры для сканирования
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (attack_type == "flood") { // Если все проверки пройдены и тип атаки - флуд
|
else if (attack_type == "flood") { // Если все проверки пройдены и тип атаки - флуд
|
||||||
log_msg += " | Type: TCP SYN flood";
|
log_msg += " | Type: TCP SYN flood";
|
||||||
printf("end my_check_params\n"); // debug
|
printf("end my_check_params\n"); // debug
|
||||||
|
@ -330,9 +376,13 @@ void my_diag()
|
||||||
log_msg += " | Error: Unknown option";
|
log_msg += " | Error: Unknown option";
|
||||||
break;
|
break;
|
||||||
case -600: // Неполные данные для Telegram-уведомлений
|
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";
|
log_msg += " | Error: To use telegram integration both telegram_id and telegram_token have to be provided";
|
||||||
break;
|
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
|
printf("end my_diag\n"); // debug
|
||||||
|
@ -1038,6 +1088,7 @@ int main(int arg_ctr, char **arg_ptr)
|
||||||
case -20:
|
case -20:
|
||||||
case -101:
|
case -101:
|
||||||
case -600:
|
case -600:
|
||||||
|
case -601:
|
||||||
my_diag(); // Выводим диагностику
|
my_diag(); // Выводим диагностику
|
||||||
status = my_log(); // Логируем событие
|
status = my_log(); // Логируем событие
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue