Можно ли программно запрашивать разные DNS-серверы имен в C++, игнорируя системные настройки?
Для моей задачи мне нужно заблокировать некоторые имена хостов, но поскольку некоторые веб-сайты могут отвечать разными IP-адресами на разные DNS-запросы (например, Google DNS и любой другой DNS-сервер), я хотел бы разрешить одно и то же имя хоста, используя разные DNS-серверы. чтобы получить как можно больше IP-адресов.
Вкратце: я хотел бы разрешить "example.com" для IP с использованием DNS #A и разрешить "example.com" для IP с использованием DNS #B без внесения каких-либо серьезных изменений в конфигурацию моей сети (или лучше без внесения каких-либо изменений в все).
Я посмотрел на Poco::Net::DNS и c-ares, однако, похоже, что они оба используют настройки ОС DNS и не позволяют направлять запросы другим DNS-серверам (поправьте меня, если я ошибаюсь).
1 ответ
Да. DNS - это протокол поверх протокола TCP, поэтому вы можете выполнять DNS-запросы везде, где можете отправлять и получать пакеты TCP (при условии, что не существует правил брандмауэра, предотвращающих эту или другие проблемы с сетью).
Однако C++ не имеет стандартной библиотеки для протокола DNS. В C++ также нет стандартной библиотеки для отправки или получения пакетов TCP (хотя это рассматривается для добавления в C++20). Вы можете зависеть от специфического API операционной системы для сетевого взаимодействия (или, как всегда, вы можете использовать библиотеку, которая упаковывает системный API).