forked from serafim/dos
1
0
Fork 0

nekitmilk_my_dns (#11)

Co-authored-by: tieshagr <tieshagr@student.21>
Co-authored-by: Serafim <simasuh@gmail.com>
Reviewed-on: https://gitea.serafimdev.com/serafim/dos/pulls/11
Reviewed-by: serafim <simasuh@gmail.com>
Co-authored-by: nekitmilk <ya.nikita1317@gmail.com>
Co-committed-by: nekitmilk <ya.nikita1317@gmail.com>
This commit is contained in:
nekitmilk 2025-04-03 17:40:48 +03:00 committed by serafim
parent 7e0804f272
commit 27d94f1199
2 changed files with 85 additions and 6 deletions

View File

@ -1,2 +1,2 @@
g++ src/DosAtk.cpp -o DosAtk -lcurl
g++ src/DosAtk.cpp -o DosAtk -lcurl -lssl -lcrypto
./DosAtk "$@"

View File

@ -572,12 +572,91 @@ int my_tcp_syn()
return 0;
}
int my_udp()
int my_dns()
{
// Данная процедура сопостовляет производит port scanning атаку
printf("start my_udp"); // debug
printf("end my_udp"); // debug
return 2;
// Данная процедура сопостовляет доменное имя с IP
// Обрабатываем перменнкю domain, записываем в ip
// -4001 - ошибка инициализации CURL
// -4002 - ошибка запроса CURL
// -4003 - ошибка парсинга JSON
CURL* curl; // объект curl
CURLcode res; // результат выполнения запроса
std::string response; // ответ DNS сервера
std::string url; // API DNS сервера
struct curl_slist* headers; // Заголовки
nlohmann::json json_data; // Ответ от dns сервера
int status; // Состояние работы процедуры
status = 0;
curl = 0;
res = {};
response = "";
url = "";
headers = {0};
json_data = {0};
printf("start my_dns"); // debug
// Инициализируем curl
curl = curl_easy_init();
if (!curl) {
status = -4001;
}
else {
// Формируем 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
// Устанавливаем заголовок
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 {
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<std::string>();
break;
}
}
}
} 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
return status;
}
// Callback для записи ответа от сервера
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
size_t total_size = size * nmemb;
output->append((char*)contents, total_size);
return total_size;
}
/*