Как в Qt / C ++ перенаправить домен x.com на y.com в Windows без файла HOSTS?

Я думал о концепции блокировщика рекламы, которая работает на уровне операционной системы, а не как расширение для браузера. Я знаю, что могу поместить x.com в файл Windows «% windows% \ system32 \ drivers \ etc \ hosts» и указать его IP-адрес y.com, а на y.com я могу отображать содержимое, которое говорит: «Это объявление заблокировано примером блокировщика рекламы «. Тем не менее, список доменов, который у меня есть, довольно большой — например, буквально тысяча доменов и растет, и это не будет хорошо работать при поиске файлов. Позволяет ли Windows каким-то образом программно, например, Qt / C ++, добавить правило перенаправления DNS более быстрым способом?

1

Решение

Существует риск выполнения перехватов домена и перехвата DLL с использованием API, потому что AV-продуктам и / или Microsoft придется занести вас в белый список и сертифицировать вас, чтобы ваша деятельность не выглядела как вирус. И вероятность того, что они это сделают, не только низка (если вы не компания с многомиллионными ценами), но они также хотят защитить свой рекламный маркетинг.

Лучший вариант — сделать расширение для каждого из браузеров. Вы даже можете проверить исходный код расширения AdBlock Chrome чтобы увидеть, как это работает. Проблема с этим в 2017 году, однако, в том, что пока нет единой платформы расширения для браузера. Становится все ближе, но еще не стандартизировано. Новый стандарт использует стандарт Chrome. Opera, Firefox, Edge и, конечно, Chrome в некоторой степени поддерживают этот новый стандарт, но он все еще не очень гладкий. И для тех, кто вне этого, таких как IE11 или более ранняя версия, у них не будет вашего расширения для браузера в стиле Chrome, и вам придется пойти по серьезному пути, чтобы сделать его только для этих более ранних браузеров, или попросить клиента обновить, когда ваш рекламный продукт устанавливается.

Если вы хотите что-то, что не требует расширения браузера, тогда вам нужно добавить еще одно соединение с DNS-сервером в настройках DNS-клиента пользователя. Я пока не знаю, как это сделать с помощью C #, Qt / C ++ или C ++. Тем не менее, вы можете использовать эти языки и использовать команду «netsh» для создания этих DNS-соединений. Вероятно, хорошей стратегией было бы найти IP-адрес шлюза пользователя по умолчанию. Затем установите приоритет DNS следующим образом:

  • ваш DNS-сервер, который перенаправляет x.com на y.com, чтобы вы могли блокировать рекламу с y.com через веб-сервер
  • IP-адрес шлюза пользователя по умолчанию
  • DNS от Google (8.8.8.8), если IP-адрес шлюза по умолчанию для пользователя изменился

Итак, это будет что-то вроде этих 4 команд netsh:

netsh delete dnsserver "Wireless Network Connection" all
netsh interface ip add dns name="Wireless Network Connection" addr=1.1.1.1 index=1
netsh interface ip add dns name="Wireless Network Connection" addr=192.168.254.254 index=2
netsh interface ip add dns name="Wireless Network Connection" addr=8.8.8.8 index=3

Измените «Беспроводное сетевое соединение» на «Подключение по локальной сети», если они используют кабель для своего компьютера вместо беспроводного. (Мало кто делает это в наши дни.)

Измените 1.1.1.1 на IP-адрес вашего специального DNS-сервера.

Измените 192.168.254.254 на IP-адрес своего шлюза по умолчанию.

Третье правило (8.8.8.8) говорит компьютеру использовать DNS Google, если ничего не помогает. Это важно, потому что они могут отключить свой ноутбук дома и пойти в кафе или что-то в этом роде, и нам нужны их DNS-ресурсы, чтобы они все еще работали.

Теперь, когда вы правильно настроите настройки DNS-клиента, вам понадобится дешевый облачный хост Linux для обслуживания DNS-сервера и веб-сервера. Вам может даже понадобиться больше, чем один, в случае, если один отказывается от обслуживания, и, возможно, в другой облачной зоне или даже в облачном хостинг-провайдере.

Для продукта DNS, если у вас есть навыки работы с Linux, вы можете установить и настроить dnsmasq Довольно легко получить дешевый и простой в управлении DNS-сервер под Linux. Или, если вы будете искать в своих репозиториях Linux, вы сможете найти другие DNS-серверы, некоторые из которых будут более надежными, чем другие, и более трудными в использовании, чем другие.

Для веб-продукта вы можете установить NGINX или Apache на каждом из двух DNS-серверов. Затем вы можете выполнить настройку, при которой к нему может подключиться любое доменное соединение, и оно загрузит веб-страницу для этого домена. На веб-странице может быть написано что-то вроде «Ad Blocked By X Ad Blocker» или что угодно, очень мелким шрифтом (достаточно маленьким, чтобы заполнить рекламное место).

После того, как все это будет сделано, вам придется перезагрузить клиент Win PC, а также очистить кэш и историю браузера, чтобы DNS перенаправлял через новое соглашение.

Конечный результат заключается в том, что, когда люди на этом ПК с Windows работают в Интернете и загружают рекламу, их ОС отправляет DNS-запрос на преобразование доменного имени в IP-адрес. Первый DNS-сервер, к которому они подключатся, будет вашим личным DNS-сервером. Затем можно сказать, что рекламный домен x.com (в качестве примера) является IP-адресом вашего частного DNS-сервера. Затем с этим частным веб-сервером свяжутся, и он покажет сообщение рекламного блока. Для всех других запросов, не обслуживаемых вашими DNS-серверами, они будут отправляться на шлюз по умолчанию. Если это не обслуживает DNS по мере необходимости, то они будут отказоустойчивыми для Google DNS на 8.8.8.8. Таким образом, просмотр веб-страниц будет работать нормально, без рекламы.

Что касается плохого списка доменов, есть поддерживаемый сообществом список плохих доменов здесь, на Github.

Проблема с частным DNS-сервером, который вы размещаете, заключается в том, что теперь вам приходится платить за пропускную способность для подключения к нему. Это, вероятно, нежелательно, если у вас нет подходящего способа монетизировать это. Лучшей стратегией было бы НЕ использовать частный DNS-сервер в Интернете и использовать локальный DNS-сервер и локальный веб-сервер. Вам придется кодировать оба из них или использовать какой-либо сторонний продукт для этого. Проблема, однако, в том, что у вас могут быть некоторые проблемы с коммерческим лицензированием или повышенные расходы, и это не будет работать для некоторых веб-разработчиков, которые уже используют веб-сервер на своей рабочей станции.

Таким образом, как вы можете видеть из проблем, связанных с дополнительными затратами, хлопотами и настройкой рабочей станции, лучшей стратегией будет использование расширения браузера для блокировки рекламы.

Однако, даже при этом, как вы собираетесь отличать свой продукт от бесплатных блокировщиков рекламы, которые уже делают сенсационную работу?

0

Другие решения

Других решений пока нет …