add my_dns
This commit is contained in:
parent
59d747188f
commit
fc975273e2
|
@ -9,6 +9,8 @@
|
|||
#include <net/if.h> // Определение констант сетевых интерфейсов (IFNAMSIZ)
|
||||
#include <sys/ioctl.h> // Управление сокетами и интерфейсами (ioctl)
|
||||
#include <fcntl.h> // Флаги файловых дескрипторов (fcntl)
|
||||
#include <curl/curl.h>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
// ====== DCL глобальные переменные ====== //
|
||||
|
||||
|
@ -404,13 +406,82 @@ void my_fin()
|
|||
std::exit(status);
|
||||
}
|
||||
|
||||
|
||||
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()
|
||||
{
|
||||
// Данная процедура сопостовляет доменное имя с IP
|
||||
// Обрабатываем перменнкю domain, записываем в ip
|
||||
// -4001 - ошибка инициализации CURL
|
||||
// -4002 - ошибка запроса CURL
|
||||
// -4003 - ошибка парсинга JSON
|
||||
|
||||
status = 0;
|
||||
CURL* curl = 0; // объект curl
|
||||
CURLcode res = {}; // результат выполнения запроса
|
||||
std::string response; // ответ DNS сервера
|
||||
std::string url = ""; // API DNS сервера
|
||||
struct curl_slist* headers = {0}; // Заголовки
|
||||
|
||||
printf("start my_dns"); // debug
|
||||
|
||||
// Инициализируем curl
|
||||
curl = curl_easy_init();
|
||||
if (!curl) {
|
||||
status = -4001;
|
||||
}
|
||||
|
||||
// Формируем 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 {
|
||||
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<std::string>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
status = -4003;
|
||||
}
|
||||
}
|
||||
|
||||
// Освобождаем ресурсы
|
||||
curl_slist_free_all(headers);
|
||||
curl_easy_cleanup(curl);
|
||||
|
||||
printf("end my_dns"); // debug
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
void my_tcp_syn()
|
||||
{
|
||||
// Данная процедура выполняет TCP SYN Flood атаку
|
||||
|
|
Loading…
Reference in New Issue