From fca5e5ac086378bdddc98ecfd700b79274645f1b Mon Sep 17 00:00:00 2001 From: tieshagr Date: Thu, 3 Apr 2025 15:49:03 +0300 Subject: [PATCH] ref my_dns --- src/DosAtk.cpp | 86 ++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/src/DosAtk.cpp b/src/DosAtk.cpp index b5dcc23..2a64215 100644 --- a/src/DosAtk.cpp +++ b/src/DosAtk.cpp @@ -9,14 +9,14 @@ #include // Определение констант сетевых интерфейсов (IFNAMSIZ) #include // Управление сокетами и интерфейсами (ioctl) #include // Флаги файловых дескрипторов (fcntl) -#include -#include +#include // Библиотека libcurl для HTTP/HTTPS запросов +#include // Библиотека для работы с JSON в C++ // ====== DCL глобальные переменные ====== // // Параметры -int argc // Количество аргументов при вызове программы -char **argv // Массив строк с агрументами +int argc; // Количество аргументов при вызове программы +char **argv; // Массив строк с агрументами std::string attack_type; // Тип атаки: scan или syn std::string domain; // Доменное Имя std::string ip; // Ip жертвы @@ -407,7 +407,6 @@ void my_fin() } -using json = nlohmann::json; // curl --http2 "https://dns.google/resolve?name=example.com&type=A" // curl --http2 --header "accept: application/dns-json" "https://1.1.1.1/dns-query?name=cloudflare.com" --next --http2 --header "accept: application/dns-json" "https://1.1.1.1/dns-query?name=yandex.com" void my_dns() @@ -418,12 +417,20 @@ void my_dns() // -4002 - ошибка запроса CURL // -4003 - ошибка парсинга JSON - status = 0; - CURL* curl = 0; // объект curl - CURLcode res = {}; // результат выполнения запроса + CURL* curl; // объект curl + CURLcode res; // результат выполнения запроса std::string response; // ответ DNS сервера - std::string url = ""; // API DNS сервера - struct curl_slist* headers = {0}; // Заголовки + std::string url; // API DNS сервера + struct curl_slist* headers; // Заголовки + nlohmann::json json_data; + + status = 0; + curl = 0; + res = {}; + response = ""; + url = ""; + headers = {0}; + json_data = {0}; printf("start my_dns"); // debug @@ -432,45 +439,50 @@ void my_dns() if (!curl) { status = -4001; } + else { + // Формируем URL для Cloudflare DoH + url = "https://1.1.1.1/dns-query?name=" + domain + "&type=A"; - // Формируем URL для Cloudflare DoH - url = "https://1.1.1.1/dns-query?name=" + domain + "&type=A"; + // Настройки CURL + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); + curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); // HTTP/2 + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); // Проверка SSL - // Настройки CURL - curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); - curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); // HTTP/2 - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); // Проверка SSL + // Устанавливаем заголовок + headers = curl_slist_append(headers, "accept: application/dns-json"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - // Устанавливаем заголовок - headers = curl_slist_append(headers, "accept: application/dns-json"); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - - // Выполняем запрос - res = curl_easy_perform(curl); - if (res != CURLE_OK) { - status = -4002; - } else { - // Парсим JSON и извлекаем IP - try { - auto json_data = json::parse(response); - if (json_data.contains("Answer")) { - for (const auto& record : json_data["Answer"]) { - if (record["type"] == 1) { // A-запись (IPv4) - ip = record["data"].get(); - break; + // Выполняем запрос + res = curl_easy_perform(curl); + if (res != CURLE_OK) { + status = -4002; + } else { + // Парсим JSON и извлекаем IP + try { + json_data = nlohmann::json::parse(response); + if (json_data.contains("Answer")) { + for (const nlohmann::json& record : json_data["Answer"]) { + if (record["type"] == 1) { // A-запись (IPv4) (Это же и проверка валидного IP) + ip = record["data"].get(); + break; + } } } + } catch (const std::exception& e) { + status = -4003; } - } catch (const std::exception& e) { - status = -4003; } } // Освобождаем ресурсы curl_slist_free_all(headers); curl_easy_cleanup(curl); + + if (!status) { + status = 1; + } printf("end my_dns"); // debug }